从Managed Bean函数调用Primefaces对话框

NKS*_*NKS 24 jsf modal-dialog primefaces managed-bean

嗨,我有一个带有一些函数的托管bean,基于该函数中的一些条件,我想调用一个对话框

托管bean函数如下

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以从这样的托管函数调用对话框

Vru*_*ank 77

您可以使用RequestContext(或者PrimeFaces如果您使用的是6.2或更高版本)类.

假设您有以下内容:

<p:dialog id="myDialogID" widgetVar="myDialogVar">
....
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

所以你在facelet本身的方式,也就是说onclick=myDialogVar.show();,你可以在你的托管bean中完成同样的事情:

对于PrimeFaces <= 3.x

RequestContext context = RequestContext.getCurrentInstance();
context.execute("myDialogVar.show();");
Run Code Online (Sandbox Code Playgroud)

对于PrimeFaces> = 4.x到PrimeFaces <6.2(根据@dognose和@Sujan)

RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('myDialogVar').show();");
Run Code Online (Sandbox Code Playgroud)

对于PrimeFaces> = 6.2

PrimeFaces current = PrimeFaces.current();
current.executeScript("PF('myDialogVar').show();");
Run Code Online (Sandbox Code Playgroud)

这是用于使用目标对话框.如果您只需要显示消息而不优先选择任何自定义对话框,那么您可以这样做:

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);
Run Code Online (Sandbox Code Playgroud)

您也可以传入参数并设置回调.请参阅链接中的展示示例.

也可以看看:


Jof*_*dez 8

如果您在primeface 4.0或以上:

RequestContext.getCurrentInstance().execute("PF('yourdialogid').show()");
Run Code Online (Sandbox Code Playgroud)


hen*_*rix 6

Vrushank's sollution is correct.

还有另一种方法:在对话框中,将呈现的属性绑定到bean的布尔值,并将visible属性设置为true,如下所示:

<p:confirmDialog
        widgetVar="myDialog"
        visible="true"
        rendered="#{myBean.showMyDialog}">
Run Code Online (Sandbox Code Playgroud)

在bean的动作监听器中,您只需调用setShowMyDialog(true),对话框将显示(假设您的对话框正在通过此操作进行更新).如果由于某种原因您不希望在用户看不到对话框的HTML时,这种方法很有用.这样,在您的bean中,您可以访问信息,无论对话框是否可见.

此解决方案的另一个好处是,您的对话框不会隐藏在ajax更新(对话框或其父对象)上.