jsf parameter-passing jsf-2.2 omnifaces view-scope

jsf - Pase un objeto entre los beans de @ViewScoped sin usar los parámetros GET



parameter-passing jsf-2.2 (1)

Depende de si está enviando una redirección o simplemente navegando.

Si está enviando una redirección, entonces póngala en el alcance del flash:

Faces.setFlashAttribute("car", car);

Esto está disponible en @PostConstruct del próximo bean como:

Car car = Faces.getFlashAttribute("car");

O, si solo estás navegando, ponlo en el ámbito de la solicitud:

Faces.setRequestAttribute("car", car);

Esto está disponible en @PostConstruct del próximo bean como:

Car car = Faces.getRequestAttribute("car");

Ver también:

  • Al inyectar una vista de bean de ámbito en otra vista, bean de ámbito hace que se vuelva a crear
  • Cómo pasar objetos de una página a otra página en JSF sin escribir un convertidor

Tenga en cuenta que asumo que conoce muy bien la opción de diseño de tener dos vistas completamente separadas que no pueden existir (ser idempotentes) sin la otra vista, en lugar de tener, por ejemplo, una vista única con contenido representado condicionalmente. Y que ya sabe exactamente cómo debe comportarse la vista cuando en realidad se solicita de forma automática (es decir, a través de un marcador, un enlace compartido, un searchbot, etc.). Si no, le recomiendo que lea detenidamente la respuesta a esta pregunta: ¿Cómo navegar en JSF? Cómo hacer que la URL refleje la página actual (y no la anterior) .

Actualización: en caso de que no esté utilizando OmniFaces, use respectivamente lo siguiente:

FacesContext.getCurrentInstance().getExternalContext().getFlash().put("car", car);

Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("car");

FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("car", car);

Car car = (Car) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("car");

Tengo un browse.xhtml donde browse.xhtml una lista de cars y quiero ver los detalles del auto en details.xhtml cuando se presiona el botón "Ver más". Sus beans de respaldo son @ViewScoped y se denominan BrowseBean y DetailsBean , respectivamente.

Ahora, no me gustaría que el usuario / cliente vea la ID del auto en la URL, así que me gustaría evitar el uso de parámetros GET, como se presenta here y here .

¿Hay alguna manera de lograr esto? Estoy usando Mojarra 2.2.8 con PrimeFaces 5 y OmniFaces 1.8.1.