Appel de la boîte de dialogue Primefaces de la fonction Bean gérée
Salut j'ai un bean managé avec quelques fonctions , basé sur une certaine condition dans cette fonction je vais appeler une boîte de dialogue
Managed bean fonction va
public String editStudent(){
setReadOnly(false);
setButton(true, true, true, false, true, true,true);
LockItem lItem;
if(selectStudent !=null){
lItem = (LockItem) services.getbyId("LockItem", condition);
if (lItem == null){
System.out.println("Student Avalibale for process :::");
studentRedirect();
return "studentEdit.jsf?faces-redirect=true";
} else {
//To show dialog from here
System.out.println("Student Not Avalibale : Locked By " + lItem.getLockedBy());
}
} else {
FacesMessage msg;
msg = new FacesMessage("Please select the record.");
FacesContext.getCurrentInstance().addMessage(null, msg);
return show("menu");
}
}
Existe-t-il une méthode permettant d'appeler la boîte de dialogue à partir d'une telle fonction gérée
3 réponses
vous pouvez, en utilisant le RequestContext
(ou PrimeFaces
si vous utilisez la classe de version 6.2 ou supérieure.
supposons que vous ayez:
<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>
donc la façon dont vous faites dans le facelet lui-même, i.e. onclick=myDialogVar.show();
, la même chose peut être fait dans votre bean géré comme suit:
Pour PrimeFaces <= 3.x
RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");
Pour PrimeFaces >= 4.x de PrimeFaces < 6.2(selon @dognose et @Sujan)
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('myDialogVar').show();")
Pour PrimeFaces >= 6.2
PrimeFaces current = PrimeFaces.current();
current.executeScript("PF('myDialogVar').show();");
ceci est pour utiliser des dialogues ciblés. Si vous avez juste besoin d'afficher un message sans donner la préférence à tout dialogue personnalisée, vous pouvez le faire de cette façon:
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Message Title", "Message body");
// For PrimeFaces < 6.2
RequestContext.getCurrentInstance().showMessageInDialog(message);
// For PrimeFaces >= 6.2
PrimeFaces.dialog().showMessageDynamic(message);
vous pouvez également passer des arguments et des callbacks de set. Reportez-vous aux exemples de la vitrine dans le lien.
Voir aussi:
Si vous êtes sur primeface 4.0 Ou ci-Dessus:
RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
la solution de Vrushank est correcte.
Il y a aussi une autre façon: dans votre boîte de dialogue lier rendu attribut à valeur booléenne de votre bean, et de le rendre visible l'attribut vrai, comme ceci:
<p:confirmDialog
widgetVar="myDialog"
visible="true"
rendered="#{myBean.showMyDialog}">
dans l'auditeur d'action dans votre haricot, vous appelez juste setShowMyDialog(true)
, et dialog s'affichera (en supposant que votre dialogue soit mis à jour par cette action). Cette approche est utile, si pour une raison quelconque vous ne voulez pas que le HTML de votre dialogue soit rendu quand il n'est pas visible à l'utilisateur. De cette façon, dans votre bean, vous avez accès à l'information, si votre dialogue est visible.
un autre avantage de cette solution est que votre dialogue n'est pas caché sur ajax update (de dialog ou de son parent).