De una acción en mi bean, estoy intentando redirigir a otra página esperando un parámetro de vista. ¿Cuál es la forma recomendada de hacer esto en JSF2?¿Cómo se pasan los parámetros de visualización cuando se navega desde una acción en JSF2?
Por ejemplo, decir que mi página de origen es: http://localhost/page1.xhtml
tiene un commandButton que llama a una acción:
<h:commandButton value="submit" action="#{myBean.submit}" />
donde mi frijol se ve así:
@ManagedBean
@RequestScoped
public class MyBean {
private int id;
public String submit() {
//Does stuff
id = setID();
return "success";
}
Y ahora, Quiero que el retorno de la acción 'enviar' navegue al http://localhost/page2.xhtml?id=2
He intentado hacer esto con un parámetro de vista en mi caja de navegación, pero con resultados extraños. El fragmento de caras-config tiene el siguiente aspecto:
<navigation-rule>
<from-view-id>/page1.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect>
<view-param>
<name>id</name>
<value>#{myBean.id}</value>
</view-param>
</redirect>
</navigation-case>
</navigation-rule>
El comportamiento extraño ser, a pesar de que myBean se establece en un ámbito de petición, sólo se llama myBean.getId() la primera vez que cargo mi solicitud, y reutiliza que mismo valor para todas las llamadas posteriores, produciendo parámetros de vista incorrectos para la página2.
Así que estoy buscando ya sea una mejor manera de hacer esto, o una razón/solución de por qué el parámetro view-param no se solicita desde mi bean cada vez.
Hice una pequeña prueba con él, y creo que funciona como yo quería. ¡Gracias! Aunque presumiblemente, se refería a "éxito? Faces-redirect = true & includeViewParams = true"; y –
dule
sí, lo siento. Pegué las dos partes del código de un proyecto en funcionamiento para evitar errores tipográficos, y aquí va: el primero proviene de la plantilla xml (donde debe escaparse el símbolo comercial) y está incompleto, y el otro tiene un nombre de variable diferente. Lo editaré de inmediato. – fdreger
@fdreger ¿dónde pondrías los metadatos cuando estás usando un h: commandButton? – Kevin