No busques más por todo internet ya que llegaste al sitio adecuado, contamos con la respuesta que necesitas recibir sin complicarte.
Establezca los parámetros de consulta GET como propiedades administradas en faces-config.xml
para que no necesite recopilarlos manualmente:
forward
com.example.ForwardBean
request
action
#param.action
actionParam
#param.actionParam
De esta manera la solicitud forward.jsf?action=outcome1&actionParam=123
permitirá que JSF establezca el action
y actionParam
parámetros como action
y actionParam
propiedades de la ForwardBean
.
Crear una vista pequeña forward.xhtml
(tan pequeño que cabe en el búfer de respuesta predeterminado (a menudo 2 KB) para que el manejador de navegación pueda restablecerlo; de lo contrario, debe aumentar el búfer de respuesta en la configuración del servletcontainer), que invoca un método de bean en beforePhase
de El f:view
:
El ForwardBean
puede verse así:
public class ForwardBean
private String action;
private String actionParam;
public void navigate(PhaseEvent event)
FacesContext facesContext = FacesContext.getCurrentInstance();
String outcome = action; // Do your thing?
facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, outcome);
// Add/generate the usual boilerplate.
El navigation-rule
habla por sí mismo (nótese el
entradas que harían ExternalContext#redirect()
en vez de ExternalContext#dispatch()
debajo de las sábanas):
outcome1
/outcome1.xhtml
outcome2
/outcome2.xhtml
Una alternativa es utilizar forward.xhtml
como
#forward
y actualizar el navigate()
método a invocar en @PostConstruct
(que se invocará después de la construcción del bean y la configuración de todas las propiedades administradas):
@PostConstruct
public void navigate()
// ...
Tiene el mismo efecto, sin embargo, el lado de la vista no es realmente autodocumentado. Todo lo que hace básicamente es imprimir ForwardBean#toString()
(y por la presente implícitamente construyendo el bean si aún no está presente).
Nota para los usuarios de JSF2, hay una forma más limpia de pasar parámetros con
y más robusta de manejar la redirección/navegación por
. Ver también entre otros:
- Pulse un método de bean y redirija en una solicitud GET
- ¿Hay alguna manera fácil de preprocesar y redirigir las solicitudes GET?
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse();
response.sendRedirect("somePage.jsp");
deberías usar action en lugar de actionListener:
y en el método cercano aciertas algo como:
public String close()
return "index?faces-redirect=true";
donde índice es una de sus páginas (index.xhtml)
Por supuesto, todo este personal debe estar escrito en nuestra página original, no en la intermedia. y dentro de la close()
puede usar los parámetros para elegir dinámicamente a dónde redirigir.
Acuérdate de que puedes optar por la opción de decir .