Calling Primefaces dialog box from Managed Bean function

NKS picture NKS · Oct 30, 2013 · Viewed 95.8k times · Source

Hi I have a managed bean with some functions , based on some condition in that function I will like to call a dialog box

Managed bean function goes as

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");
    }
}

Is there any method using which we can call the dialog box from such managed function

Answer

Vrushank picture Vrushank · Oct 30, 2013

You can, by using the RequestContext (or PrimeFaces if you are using the version 6.2 or higher) class.

Suppose you have the following:

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

So the way you do in the facelet itself, i.e. onclick=myDialogVar.show();, the same can be done in your managed bean like so:

For PrimeFaces <= 3.x

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

For PrimeFaces >= 4.x to PrimeFaces < 6.2 (as per @dognose and @Sujan)

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

For PrimeFaces >= 6.2

PrimeFaces current = PrimeFaces.current();
current.executeScript("PF('myDialogVar').show();");

This is for using targeted dialogs. If you just need to show a message without giving preference to any custom dialog, then you can do it this way:

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

You can pass in arguments and set callbacks as well. Refer to the showcase examples in the link.

See also: