Zaawansowane odwzorowania wieloznaczne Parametry nie zostały znalezione w metodzie Prepare ()

Z dokumentacji:Zaawansowane odwzorowania wieloznaczne Struts2:

Zaawansowane symbole wieloznaczne

Od 2.1.9+ można zdefiniować wyrażenia regularne zdefiniowane w nazwie akcji. Aby użyć tej formy wieloznacznej, należy ustawić następujące stałe:

<constant name="struts.enable.SlashesInActionNames" value="true"/> 
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />

Wyrażenia regularne mogą być w dwóch formach, najprostsza jest{FIELD_NAME}, w którym to przypadku pole zFIELD_NAME w akcji zostanie wypełniony dopasowany tekst, na przykład:

<package name="books" extends="struts-default" namespace="/">
    <action name="/{type}/content/{title}" class="example.BookAction">
        <result>/books/content.jsp</result>
    </action> 
</package>

W tym przykładzie, jeśli adres URL/fiction/content/Frankenstein jest wymagane, pole BookAction ”type„zostanie ustawiony na”fiction„i pole”title„zostanie ustawiony na”Frankenstein

Jest to absolutnie świetne i działa dobrze, jeśli czytasz te zmienne w zwykłej metodzie akcji, jakexecute().

Jeśli spróbujesz przeczytać je zprepare() metoda, są zerowe, ponieważPrepareInterceptor uruchamia się przed innymi Interceptorami odpowiedzialnymi za ustawianie parametrów; zwykłym sposobem rozwiązania tego problemu jest użycie odpowiedniego stosu przechwytywacza, aby uzyskać parametry już wypełnione podczas wykonywaniaprepare() metoda...

Z dokumentacji:ParamsPrepareParamStack

<!-- An example of the paramsPrepareParams trick. This stack
     is exactly the same as the defaultStack, except that it
     includes one extra interceptor before the prepare interceptor:
     the params interceptor.

     This is useful for when you wish to apply parameters directly
     to an object that you wish to load externally (such as a DAO
     or database or service layer), but can't load that object
     until at least the ID parameter has been loaded. By loading
     the parameters twice, you can retrieve the object in the
     prepare() method, allowing the second params interceptor to
     apply the values on the object. -->

Działa to doskonale dla parametrów pochodzących ze strony, ale tonie działa dla parametrów ustawionych przez Zaawansowane symbole wieloznaczne. Nadal są zerowe.

Jak rozwiązać ten problem?

questionAnswers(2)

yourAnswerToTheQuestion