7 Stimmen

Deaktivieren des Redirect-Filters von Seam

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.

7voto

Peter Hilton Punkte 16948

Ich habe herausgefunden, wo die unerwünschten conversationId Parameter der Abfragezeichenfolge stammt.

En <redirect/> führt zu einem Aufruf von org.jboss.seam.faces.FacesManager.redirect(String viewId, Map<String, Object> parameters, boolean includeConversationId)

Der Aufruf erfolgt über den folgenden Code in org.jboss.seam.faces.Navigator die die includeConversationId zu wahr:

  FacesManager.instance().redirect(viewId, parameters, true);

Ich kann keine Möglichkeit sehen, dies zu vermeiden, so dass die Lösung/Workaround ist die Umleitung programmgesteuert in der Action-Methode mit zu tun:

  FacesManager.instance().redirect(viewId, parameters, false);

1voto

OK, ich habe es geschafft, den Redirect-Filter auszuschalten, indem ich dies zu meiner compononents.xml hinzugefügt habe:

<web:redirect-filter disabled="true" installed="false" />

Mein Hauptproblem besteht jedoch nach wie vor, das war also offensichtlich nicht das Problem. Es fügt immer noch die conversationId als zusätzlichen Query-String in die URL ein. Offenbar mache ich etwas falsch, denn es wurde schon einmal gemacht .

@Adeel Ansari:

Komponenten.xml:

 <web:rewrite-filter view-mapping="/seam/*" />

pages.xml siehe meine ursprüngliche Frage.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X