Pregunta

Puede alguien decirme cómo los parámetros de captura que pasan de URI en el bean gestionado de JSF? Tengo un menú de navegación de todos los nodos de los cuales enlaza con algún caso de navegación. Y tengo dos artículos similares allí: La adquisición de productos y emisión de productos. Tienen la misma página, pero un parámetro diferente: ProductType. Trato de establecer simplemente añadiéndolo a URL en "a-view-id" elemento de la siguiente manera:

<navigation-case>
    <from-outcome>acquiring|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=acquiring</to-view-id>
</navigation-case>

<navigation-case>
    <from-outcome>issuing|products</from-outcome>
    <to-view-id>/pages/products/list_products.jspx?productType=issuing</to-view-id>
</navigation-case>

Pero no puedo conseguir este "ProductType" de mi bean gestionado. He intentado conseguir a través de FacesContext como esto:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("productType")

Y como esto:

HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
    request.getParameter("productType");

Y me trató de incluirlo como un parámetro de bean administrado en faces-config.xml y luego conseguir a través de la moda ordinaria:

 <managed-bean>
        <managed-bean-name>MbProducts</managed-bean-name>
        <managed-bean-class>my.package.product.MbProducts</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
     <managed-property>
         <property-name>productType</property-name>
         <value>#{param.productType}</value>
     </managed-property>
    </managed-bean>
...
public class MbProducts {
...
 public void setProductType(String productType) {
  this.productType = productType;
 }
...
}

Sin embargo, ninguna de estas maneras me han ayudado. Todos ellos un valor nulo. ¿Cómo puedo conseguir este ProductType? O ¿cómo puedo pasar de alguna otra forma?

¿Fue útil?

Solución

La regla de navegación por defecto hace un hacia adelante . Es decir. se vuelve a utilizar el inicial petición. Cualquier manera se intenta acceder a los parámetros de la petición en el recurso remitido, siempre va a tratar de apoderarse de ellos desde la solicitud inicial y ya procesada.

Para solucionar este problema, tiene que disparar un redireccionamiento en lugar de hacia adelante. Se crea una nueva petición (también se puede ver esto de nuevo se refleja en la barra de direcciones del navegador).

En JSF, añadiendo

<redirect/>

para el caso de navegación debe hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top