Pergunta

No seguimento de uma questão mais antiga do meu, eu consegui obter URL Reescrevendo a trabalhar um pouco corretamente para meus suportes projeto onde URLs como search?q=blah são convertidos para consultas search.action?q=blah. Usamos UrlRewriteFilter para isso. Este parece encaminhar bem para suportes (se certificando-se de que tem um mapeamento de filtro com FORWARD), mas quando o ParametersIntercepter corre parece estar a recuperar todos os parâmetros duas vezes, e adicionando vírgula de no meio. Assim, o seguinte:

search.action?q=blah

Define o q parâmetro no objeto Criteria (ver mais adiante) para:

[ blah, blah ]

Os parâmetros são definidos usando ModelDriven<Criteria> Onde Criteria é uma classe simples com um monte de propriedades para ser definido a partir da cadeia GET.

Eu estou em uma perda para explicar por que isso está acontecendo. Alguém já viu algo assim? Estou fazendo algo de errado com relação aos filtros / interceptores?

edit: Parece que o ParametersInterceptor simplesmente define os parâmetros contidos dentro do objeto ActionContext. Não tenho certeza (e não estou vendo nenhum mensagens de depuração que indicam), onde esses valores estão sendo definidos no ActionContext. O cuidado ninguém para esclarecer como tudo isto é suposto para trabalhar?

Foi útil?

Solução 2

Eu não tenho resolvido o comportamento estranho acima, mas eu consegui encontrar um erro na url reescrever, páginas onde não sendo redirecionado para 'mySearch.action', mas a 'mySearch.action?'. Usando url reescrever agora com uma regra fixa e não incluindo parâmetros de consulta parece funcionar bem.

EDIT: Eu finalmente rastreado a um problema com UrlRewriteFilter ser configurado para escutar em ambos PEDIDO e FORWARD. Aparentemente, este causas GET parâmetros para obter analisado duas vezes. I no entanto, ainda não incluem consulta parâmetros (como que normalmente confunde as coisas de qualquer maneira), então isso pode não resolver o problema completamente. É o mais provável culpado embora.

Em particular, o meu mapeamento de filtro agora se parece com:

<filter-mapping>
     <filter-name>UrlRewriteFilter</filter-name>
     <url-pattern>/*</url-pattern>
     <dispatcher>REQUEST</dispatcher>
</filter-mapping>

Outras dicas

Apenas no caso de você ainda pode estar interessado em um pedaço extra de informações, você está ciente de que as versões mais recentes do Struts2 (isto é, 2,1.?) Não impõem o .action extensão para suas ações? Na verdade, você não precisa de qualquer extensão a todos!

Se minha memória não me falha, a única exigência é que, em web.xml, você mapear seu filtro Struts2 (org.apache.struts2.dispatcher.FilterDispatcher) a url-pattern: /*

<filter-mapping>
   <filter-name>action2</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

A partir de então, uma tag <s:url> aparece em uma página cuja extensão é a vontade vazio, por sua vez, gerar uma URL sem extensão ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top