Параметры расширенного подстановочного знака, не найденные в методе Prepare ()

Из документации:Расширенные сопоставления подстановочных знаков в Struts2:

Расширенные шаблоны

Начиная с 2.1.9+, регулярные выражения могут быть определены в имени действия. Чтобы использовать эту форму подстановочных знаков, должны быть установлены следующие константы:

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

Регулярные выражения могут быть в двух формах, самый простой{FIELD_NAME}в этом случае поле сFIELD_NAME в действии будет заполнен сопоставленный текст, например:

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

В этом примере, если URL/fiction/content/Frankenstein запрашивается, поле BookAction "type"будет установлен в"fiction"и поле"title"будет установлен в"Frankenstein».

Это абсолютно здорово, и работает нормально, если вы читаете эти переменные в обычном методе Action, напримерexecute().

Если вы попытаетесь прочитать их сprepare() метод, они нулевые, потому чтоPrepareInterceptor запускается раньше, чем другие перехватчики, отвечающие за настройку параметров; Обычный способ решить эту проблему - использовать подходящий стек перехватчиков, чтобы получить параметры, уже заполненные при выполненииprepare() метод ...

Из документации: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. -->

Это прекрасно работает для параметров, поступающих со страницы, но этоне работает для параметров, установленных Advanced Wildcards, Они все еще нулевые.

Как решить эту проблему?

Ответы на вопрос(2)

Ваш ответ на вопрос