Passer un objet entre @ ViewScoped beans sans utiliser GET params

j'ai un browse.xhtml où je parcours une liste de cars et je veux voir les détails de la voiture dans details.xhtml quand un bouton" View more " est appuyé. Leurs fèves de soutien sont @ViewScoped et sont appelés BrowseBean et DetailsBean , respectivement.

maintenant, je ne voudrais pas que l'utilisateur/client voit l'ID de la voiture dans L'URL, donc je voudrais éviter D'utiliser GET params, comme présenté ici et ici .

y a-t-il un moyen d'y parvenir? J'utilise Mojarra 2.2.8 avec PrimeFaces 5 et OmniFaces 1.8.1.

16
demandé sur Community 2014-09-06 01:46:24

1 réponses

Dépend si vous envoyez une redirection ou simplement la navigation.

si vous envoyez une redirection, alors mettez - la dans la portée flash:

Faces.setFlashAttribute("car", car);

C'est disponible dans le @PostConstruct de la prochaine fève comme:

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

ou, si vous ne faites que naviguer, mettez - le dans la portée de la requête:

Faces.setRequestAttribute("car", car);

C'est disponible dans le @PostConstruct de la prochaine fève comme:

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

voir aussi:

notez que je suppose que vous êtes très au courant du choix de conception d'avoir deux entièrement séparé vues qui ne peuvent pas exister (être idempotent) sans l'autre vue, au lieu d'avoir par exemple une vue unique avec un contenu Rendu conditionnel. Et que vous savez déjà comment exactement la vue devrait se comporter quand elle est effectivement demandée idempotently (i.e. via un signet, un lien partagé, par un searchbot, etc). Si non, alors je recommande fortement de lire attentivement la réponse à cette question: comment naviguer dans JSF? Comment faire pour que L'URL reflète la page actuelle (et non la précédente) .


mise à jour: si vous n'utilisez pas OmniFaces, utilisez respectivement:

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");
39
répondu BalusC 2017-05-23 11:47:19