Comment conditionnelle p:boîte de dialogue basée sur la sauvegarde de haricots condition
Est-il de toute façon (ou d'une manière correcte) à conditionnellement afficher une boîte de dialogue sur primefaces basé sur un backing bean état?
Le code se présente comme suit:
<!-- dialog declaration -->
<p:dialog id="dialogTest" widgetVar="dialogTest" header="#{text['modal.header']}" modal="true" >
<h:outputText value="Test output" />
</p:dialog>
<!-- caller -->
<p:menuitem value="Check" actionListener="#{backingBean.performCheck}" oncomplete="PF('dialogTest').show()" icon="ui-icon-arrowthick-1-e"/>
Mon backing bean se présente comme suit:
private boolean conditionFlag; //... +getter
public void performCheck() {
//... access managers (database)
this.conditionFlag = dao.check();//some check;
}
Je veux juste afficher la boîte de dialogue dans le cas où le conditionFlag
est true
. Comment puis-je faire quelque chose comme ceci sur p:menuitem
après performCheck
fonctionne?
oncomplete="if (#{backingBean.conditionFlag}) { PF('dialogTest').show() }"
- JSF 2.0
- Primefaces 5
- Java 1.7
OriginalL'auteur nuno | 2014-08-14
Vous devez vous connecter pour publier un commentaire.
juste ajouter
update="@this"
à lap:menuitem
. ensuite, votreoncomplete
bloc de travail comme vous l'attendez.@this
, j'ai ma propre réponse à terminer le vôtreOriginalL'auteur tt_emrah
J'ai eu que cela fonctionne comme suit
Le backing bean reste inchangé (comme dans la question).
La principale différence est dans le
oncomplete
attribut et de l'ajaxupdate
attribut ()le menuitem n'est pas mis à jour - le menuitem est indépendant de
dialogForm
. Cependant, je ne pense pas que cela peut faire mal si le formulaire inclus le menuitem (attention à l'ids et namingcontainers)alors, comment est le
if (#{backingBean.conditionFlag})
partie mis à jour lors de la requête ajax est terminé?Je pense que le truc, c'est le
oncomplete
attribut: sionclick
est utilisé il n'y a aucune garantie de laif (#{backingBean.conditionFlag})
exécute après laactionListener
exécuteje crois menuitem être mis à jour en effet. parce que oui, oncomplete des travaux après l'action de l'auditeur, mais il n'est pas assez. si vous n'avez pas de mise à jour menuitem, que si la clause resteront les mêmes après le chargement initial de la page.
OriginalL'auteur nuno
Juste lier la variable booléenne de la
visible
attribut de la boîte de dialogue.et laisser ensuite le point de menu exécuter comme d'habitude:
Pas de travail supplémentaire nécessaire. Pour de meilleurs résultats, utilisez un
@ViewScoped
bean.non, il ne sera pas, mais bon catch - j'ai oublié d'ajouter le peu qu'ajax-les mises à jour de la boîte de dialogue
Je reçois la différence entre le rendu et des attributs visibles - je pense qu'il est plus correct de ne pas la rendre à tous les parce que, dans mon cas, la boîte de dialogue affichera différents (côté serveur d'origine) de données à chaque fois qu'il est montré, donc je suis en optant par le rendu de rechange
Je l'ai eu à travailler, j'ai remarqué l'ajax a été mise à jour manquantes et que c'était ça, va apporter ma propre réponse - je pourrais considérer ce la bonne réponse (car la mise à jour a disparu et j'ai remarqué lors de la lecture de vos commentaires), mais les fondamentaux de la réponse ne serait pas répondre à ce qui n'était pas de travail. Donc, je vais juste +1
OriginalL'auteur kolossus