Frage

auf einer älteren Frage von mir Anknüpfend konnte ich auf Anfragen search?q=blah URL Rewriting arbeitet etwas richtig für mein Streben Projekt, bei dem URLs wie search.action?q=blah erhalten umgewandelt bekommen. Wir verwenden UrlRewriteFilter für diese. Dies scheint Streben fein zu übermitteln (falls sicherstellen, dass es eine Filterzuordnung mit FORWARD hat), aber wenn der ParametersIntercepter läuft so scheint es, jeden Parameter zweimal, und das Hinzufügen von Kommas dazwischen zu kontrollieren. So wie folgt vor:

search.action?q=blah

Setzt den Parameter q auf dem Criteria-Objekt (siehe weiter unten) zu:

[ blah, blah ]

Die Parameter werden mit ModelDriven<Criteria> Wo Kriterien eine einfache Klasse mit einem Bündel von Eigenschaften sind von dem GET-String gesetzt werden.

Ich bin an einem Verlust zu erklären, warum dies geschieht. Hat jemand jemals etwas gesehen? Bin ich etwas falsch in Bezug auf die Filter / Abfangjäger tun?

edit: Es scheint, die ParametersInterceptor einfach die Parameter im Action Objekt enthalten setzt. Ich bin nicht sicher (und bin keine Debug-Meldungen zu sehen, die angeben), wo diese Werte in der Action gesetzt werden. Hat jemand dafür interessieren zu klären, wie das alles funktionieren soll?

War es hilfreich?

Lösung 2

Ich habe nicht das seltsame Verhalten, das oben gelöst, aber ich habe es geschafft, ein Fehler in der URL-Rewriting zu finden, die Seiten, auf denen nicht zu ‚mySearch.action‘ umgeleitet werden, sondern zu ‚mySearch.action?‘. URL jetzt mit einer festen Regel und ohne Abfrage params Umschreiben scheint gut zu funktionieren.

EDIT: Ich dies schließlich zu einem Problem verfolgt mit urlrewritefilter auf beiden REQUEST und FORWARD zu hören aufgebaut. Offensichtlich führt diese Parameter GET zweimal bekommen analysiert. Ich aber noch nicht enthalten Abfrage params (wie dieser in der Regel Dinge ohnehin verwirrt), so könnte dies das Problem nicht vollständig beheben. Es ist die wahrscheinlichste Ursache though.

Insbesondere meine Filterzuordnung sieht nun wie:

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

Andere Tipps

Gerade falls Sie noch in einem extra Stück Info interessiert sein könnten, sind Sie sich bewusst, dass die neuesten Versionen von Struts2 (das heißt, 2.1.?) Haben die Erweiterung .action auf Ihre Aktionen nicht verhängen? In der Tat brauchen Sie keine Erweiterung überhaupt nicht!

Wenn meine Erinnerung mich richtig dient, ist die einzige Voraussetzung, dass in web.xml, Karten Sie Ihre Struts2 Filter (org.apache.struts2.dispatcher.FilterDispatcher) mit url-Muster: /*

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

Von da an einem <s:url> Tag auf einer Seite, deren Erweiterung erscheint, wird leer wird wiederum erzeugt eine URL ohne Erweiterung ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top