Mapeamentos avançados de caracteres curinga Parâmetros não encontrados no método Prepare ()

Da documentação:Mapeamentos avançados de curingas do Struts2:

Wildcards Avançados

A partir de 2.1.9, expressões regulares podem ser definidas no nome da ação. Para usar essa forma de curinga, as seguintes constantes devem ser definidas:

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

As expressões regulares podem ser de duas formas, a mais simples é{FIELD_NAME}, nesse caso, o campo com oFIELD_NAME na ação será preenchido com o texto correspondente, por exemplo:

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

Neste exemplo, se o URL/fiction/content/Frankenstein é solicitado, o campo de BookAction "type"será definido como"fiction"e o campo"title"será definido como"Frankenstein".

Isso é absolutamente ótimo, e funciona bem se você ler essas variáveis ​​em um método Action regular, comoexecute().

Se você tentar lê-los doprepare() método, eles são nulos, porque oPrepareInterceptor executa antes dos outros responsáveis ​​pelos Interceptors para configurar os parâmetros; A maneira usual de resolver esse problema é usar a Pilha de Interceptadores apropriada para obter os parâmetros já preenchidos ao executar oprepare() método...

Da documentação: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. -->

Isso funciona muito bem para parâmetros vindos da página, masnão funciona para os parâmetros definidos por Wildcards Avançados. Eles ainda são nulos.

Como resolver esse problema?

questionAnswers(2)

yourAnswerToTheQuestion