2009-02-11 6 views
0

Suite à une de mes anciennes questions, j'ai réussi à faire fonctionner correctement la réécriture d'URL pour mon projet Struts où des URL comme search?q=blah sont converties en requêtes search.action?q=blah. Nous utilisons UrlRewriteFilter pour cela. Cela semble bien se transmettre aux struts (si vous vous assurez qu'il a un filtre avec FORWARD), mais quand le ParametersIntercepter s'exécute il semble attraper chaque paramètre deux fois, et en ajoutant des virgules entre les deux. Ainsi, les éléments suivants:Combinaison d'UrlRewriteFilter et de Struts 2 avec les paramètres get

search.action?q=blah 

Définit le paramètre q sur l'objet Critères (voir plus loin) à:

[ blah, blah ] 

Les paramètres sont définis par le biais ModelDriven<Criteria> Lorsque des critères est une classe simple avec un tas de propriétés à être défini à partir de la chaîne GET.

Je n'arrive pas à expliquer pourquoi cela se produit. Est-ce que quelqu'un a déjà vu quelque chose comme ça? Est-ce que je fais quelque chose de mal en ce qui concerne les filtres/intercepteurs?

edit: Il semble que le ParametersInterceptor définit simplement les paramètres contenus dans l'objet ActionContext. Je ne suis pas sûr (et je ne vois pas les messages de débogage qui indiquent) où ces valeurs sont définies dans le ActionContext. Est-ce que quelqu'un se soucie de clarifier comment tout cela est censé fonctionner?

Répondre

0

Je n'ai pas résolu le comportement étrange ci-dessus, mais j'ai réussi à trouver une erreur dans la réécriture d'URL, les pages ne sont pas redirigées vers 'mySearch.action' mais 'mySearch.action?'. L'utilisation de la réécriture d'URL avec une règle fixe et sans les paramètres de requête semble fonctionner correctement.

EDIT: J'ai finalement mis en évidence un problème avec urlrewritefilter étant mis en place pour écouter à la fois sur DEMANDE et FORWARD. Apparemment, cela fait que les paramètres GET sont analysés deux fois. Cependant, je n'inclue toujours pas les paramètres de requête (car cela dérange généralement les choses), donc cela ne résout pas complètement le problème. C'est le coupable le plus probable cependant.

En particulier, ma cartographie filtre ressemble maintenant:

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

acceptée réponse propre de sorte qu'il ne montre pas comme sans réponse – wds

0

vous pourriez encore être Juste au cas où intéressé par une pièce supplémentaire de l'info, savez-vous que les versions les plus récentes de Struts2 (qui est, 2.1.?) N'imposez pas l'extension .action à vos actions? En fait, vous n'avez besoin d'aucune extension!

Si ma mémoire est bonne, la seule exigence est que, dans web.xml, vous associez votre filtre Struts2 (org.apache.struts2.dispatcher.FilterDispatcher) à motif url: /*

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

A partir de là, une étiquette <s:url> figurant sur une page dont l'extension est vide va, à son tour, générer une URL sans extension ...

+0

Je étais un peu au courant, je pensais que vous deviez définir l'extension à vide dans la config si. Mais dans notre cas cela ne l'a pas vraiment résolu car nous redirigeons tous les types d'URL de repos qui ne correspondent pas toujours à des actions différentes. Merci quand même. – wds

Questions connexes