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

20
demandé sur mrjimoy_05 2013-10-30 13:19:23

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:

68
répondu Vrushank 2018-09-21 09:45:14

Si vous êtes sur primeface 4.0 Ou ci-Dessus:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
8
répondu Joffrey Hernandez 2016-10-17 19:51:36

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).

6
répondu hendrix 2013-11-19 13:17:59