2017-02-22 2 views
0

Lorsque je suis sur le point de naviguer vers une autre page, je voudrais mettre un objet dans le flash. Voilà comment je le fais à l'heure actuelle:Accès flash avec h: lien dans JSF

<h:commandLink action="#{bean.foo(object)}"> 
    <h:graphicsImage .../> 
</h:commandLink> 

Et la méthode de haricot:

public String foo(Object o) { 
    FacesContext.getCurrentInstance().getExternalContext().getFlash().put("key", o); 
    return "target.xhtml?faces-redirect=true"; 
} 

je voudrais le faire avec un h: lien xhtml sans méthode de haricot (également parce que j'ai entendu que la navigation commandLink est mauvaise). J'ai quelque chose comme cela à l'esprit, pour remplacer le code ci-dessus:

<h:link outcome="target.xhtml"> 
    <h:graphicsImage .../> 
    <someTag someAttr="#{facesContext.externalContext.flash.put("key", object)}"/> 
</h:link> 

est-il une telle étiquette (une_balise) qui peut être utilisé comme ça?

Répondre

2

Vous ne pouvez pas transmettre d'attributs Flash tels que les attributs GET avec un h:link. ViewParams ne sont pas assez? C'est le meilleur moyen de naviguer.

Mais vous pouvez mettre des variables à portée de flash avec c:set. Le problème est si vous voulez définir la valeur de manière dynamique après avoir appuyé sur le lien.

espace de noms Ajouter sinon déjà xmlns:c="http://java.sun.com/jsp/jstl/core"

<c:set target="#{flash}" property="key" value="object"/> 
<h:link outcome="target.xhtml"> 
    <h:graphicsImage .../> 
</h:link> 
+0

Ce c: chose mis semble prometteur. Je ne peux pas simplement mettre cela dans le lien h: pour l'exécuter quand je clique sur le lien? – user1785730

+0

Vous pouvez, mais il est déclenché au chargement de la page, pas après avoir cliqué sur le lien. – jklee