2009-01-10 11 views
7

Estoy haciendo un proyecto en costura que requiere URLs relajantes. Tengo una vista que está asignada a/group/{group}/{locale}. En esa página tengo una lista de los llamados mensajes. Cada mensaje tiene un botón para guardar los cambios en el mensaje. Esto está relacionado con un bean de acción como esta:Deshabilitar el filtro de redirección de costura

<h:commandButton type="submit" value="Save Changes" action="#{groupAction.update}" /> 

Cada mensaje tiene un ancla, de modo/grupo/{grupo}/{locale} # {id} se puede utilizar para hacer que el navegador vaya a ese anclaje. Esto es por eso que necesito una redirección después de la 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> 

También tengo la siguiente regla de redirección (UrlRewriteFilter) para llegar a la URL REST correcta:

<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> 

me pele el conversationId aquí. Esto ha sido probado y funciona. Sin embargo, seam aún agrega un '? ConversationId = {cid}'. ¿Entonces, cuál es el problema? Bueno, imagine una URL como '/ group/{group}/{locale} # {id}? ConversationId = {cid}'. Oviously al navegador no le gusta esto y no irá automáticamente a ese ancla.

me hizo una investigación y descubrió mi problema en la documentación de la costura:

29.1.4.2. Propagación de conversación con redirecciones Este filtro permite a Seam propagar el contexto de la conversación a través de los redireccionamientos del navegador. Intercepta cualquier redireccionamiento de navegador y agrega un parámetro de solicitud que especifica el identificador de conversación de Seam. El filtro de redireccionamiento procesará todas las solicitudes por defecto, pero este comportamiento también puede ser ajustado en components.xml:

<web:redirect-filter url-pattern="*.seam"/> 

No necesito la redirección-filtro y he intentado poner algo válido en el url-pattern a "desactivar" el filtro. Sin embargo, eso no funcionó. Entonces mi pregunta es ahora:

¿Cómo desactivo el filtro de redirección en la costura?

No puedo encontrar la respuesta. La documentación de la costura habla sobre deshabilitarla en web.xml, pero mis intentos aún no han sido exitosos.

Respuesta

7

He calculado de dónde viene el parámetro de cadena de consulta conversationId no deseado.

Los <redirect/> resultados en una llamada a org.jboss.seam.faces.FacesManager.redirect(String viewId, Map<String, Object> parameters, boolean includeConversationId)

Esto se llama desde el código siguiente en org.jboss.seam.faces.Navigator que establece includeConversationId true:

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

que no puedo ver ninguna manera de evitar esto, por lo que la solución/solución es hacer la redirección mediante programación en el método de acción con:

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

OK, he conseguido matar a la redirección del filtro añadiendo esto a mi compononents.xml:

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

Sin embargo aún existe mi principal problema, por lo que al parecer no era el problema. Aún agrega la ID de conversación como una cadena de consulta adicional en la URL. Aparentemente estoy haciendo algo mal desde it has been done before.

@Adeel Ansari:

components.xml:

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

pages.xml ver a mi pregunta inicial.

+0

¿Ha configurado UrlRewriteFilter, en su web.xml? –

+0

Sí, tengo y UrlRewriteFilter está funcionando, pero todavía la costura agrega el? ConversationId –

+0

¿Has intentado eliminar SeamRedirectFilter de tu web.xml por completo? puede ser solo para probar el caso. –

Cuestiones relacionadas