web-dev-qa-db-fra.com

Appel de la boîte de dialogue Primefaces à partir de la fonction de bean géré

Salut, j'ai un bean géré avec certaines fonctions, basé sur une condition dans cette fonction, j'aimerais appeler une boîte de dialogue

La fonction de bean géré va comme

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

24
NKS

Vous pouvez, en utilisant la classe RequestContext (ou PrimeFaces si vous utilisez la version 6.2 ou supérieure).

Supposons que vous ayez les éléments suivants:

<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>

Donc, comme vous le faites dans la facette elle-même, c'est-à-dire onclick=myDialogVar.show();, la même chose peut être faite dans votre bean géré comme ceci:

Pour PrimeFaces <= 3.x

RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");

Pour PrimeFaces> = 4.x à 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();");

C'est pour utiliser des dialogues ciblés. Si vous avez juste besoin d'afficher un message sans donner la préférence à une boîte de 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 définir des rappels. Reportez-vous aux exemples de démonstration du lien.

Voir aussi:

76
Vrushank

Si vous êtes sur Primeface 4.0 ou supérieur:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
8
Joffrey Hernandez

La solution de Vrushank est correcte.

Il existe également une autre méthode: dans votre boîte de dialogue, liez l'attribut rendu à une valeur booléenne de votre bean et définissez l'attribut visible sur true, comme ceci:

<p:confirmDialog
        widgetVar="myDialog"
        visible="true"
        rendered="#{myBean.showMyDialog}">

Dans l'écouteur d'action de votre bean, vous appelez simplement setShowMyDialog(true), et une boîte de dialogue s'affiche (en supposant que votre boîte de dialogue est mise à jour par cette action). Cette approche est utile si, pour une raison quelconque, vous ne voulez pas que le code HTML de votre boîte de dialogue soit rendu lorsqu'il n'est pas visible pour l'utilisateur. De cette façon, dans votre bean, vous avez accès aux informations, que votre boîte de dialogue soit visible.

Un autre avantage de cette solution est que votre boîte de dialogue n'est pas masquée lors de la mise à jour ajax (de la boîte de dialogue ou de son parent).

6
hendrix