Ich mache ein Projekt in Naht, die restful URLs erfordert. Ich habe eine Ansicht, die auf /group/{group}/{locale} abgebildet wird. Auf dieser Seite habe ich eine Liste von so genannten Nachrichten. Jede Nachricht hat eine Schaltfläche zum Speichern von Änderungen an der Nachricht. Diese ist mit einer Action Bean wie dieser verknüpft:
<h:commandButton type="submit" value="Save Changes" action="#{groupAction.update}" />
Jede Nachricht hat einen Anker, so dass /group/{group}/{locale}#{id} verwendet werden kann, damit der Browser zu diesem Anker geht. Deshalb brauche ich eine Weiterleitung nach dem POST:
<page view-id="/group.xhtml">
<rewrite pattern="/group/{group}/{locale}"/>
<param name="group" value="#{groupAction.group}"/>
<param name="locale" value="#{groupAction.locale}"/>
<navigation from-action="#{groupAction.update}">
<redirect view-id="/group.xhtml?group=#{group}&locale=#{locale}##{id}"/>
</navigation>
</page>
Außerdem habe ich die folgende Umleitungsregel (UrlRewriteFilter), um die richtige RESTful URL zu erhalten:
<outbound-rule>
<from>^/group.xhtml\?group=([\.\w]+)&locale=([\.\w]+)\#([\.\w]+)\?cid=(\d*)$</from>
<to type="temporary-redirect" last="true">/group/$1/$2#$3</to>
</outbound-rule>
Ich entferne die conversationId hier. Dies wurde getestet und funktioniert. Allerdings fügt die Naht immer noch ein '?conversationId={cid}' an. Wo liegt also das Problem? Nun, stellen Sie sich eine URL wie '/group/{group}/{locale}#{id}?conversationId={cid}' vor. Der Browser mag das natürlich nicht und wird nicht automatisch zu diesem Anker gehen.
Ich habe einige Nachforschungen angestellt und mein Problem in der Nahtdokumentation entdeckt:
29.1.4.2. Weitergabe von Gesprächen mit Umleitungen Dieser Filter ermöglicht es Seam, den Konversationskontext über Browserumleitungen hinweg weiterzugeben. Er fängt alle Browser-Weiterleitungen ab und fügt einen Anforderungsparameter hinzu, der den Seam-Konversationsbezeichner angibt. Der Redirect-Filter verarbeitet standardmäßig alle Anfragen, aber dieses Verhalten kann auch in components.xml angepasst werden:
<web:redirect-filter url-pattern="*.seam"/>
Ich brauche den Redirect-Filter nicht, und ich habe versucht, etwas Ungültiges in das URL-Muster einzugeben, um den Filter zu "deaktivieren". Das hat aber nicht funktioniert. Meine Frage ist also jetzt:
Wie kann ich den Redirect-Filter in seam deaktivieren?
Ich kann die Antwort nicht finden. Die Seam-Dokumentation spricht über die Deaktivierung in web.xml, aber meine Versuche waren noch nicht erfolgreich.