如何从后台bean显示确认对话框(Primefaces)

我有一个导入功能,它将解析包含文档版本信息的XML文件并将其保存在数据库中。 如果用户尝试上传已经存在的版本,我需要显示确认对话框,如“您已经存在的版本是否要覆盖..?” 好的,取消。

我使用Mozarra 2.0.3,Prime面向2.2 RC2,Glass Fish 3,我正在尝试这种方式。

<h:form id="conDialog">
    <p:commandButton value="getConfirmMsg" update="conDialog" action="#{buttonBean.getConfirmMsg()}" 
        oncomplete="confirmation.show()"/>
    <p:growl id="messages1" globalOnly="true"/>
    <p:confirmDialog message="Version already exists. Do you want to override it?"
        rendered="#{buttonBean.showConfirm}"
        header="Version already exist" severity="alert" widgetVar="confirmation">
        <p:commandButton value="OK" update="messages1" oncomplete="confirmation.hide()"
            action="#{buttonBean.overrideVersion}" />
        <p:commandButton value="Cancel" onclick="confirmation.hide()" type="button" />
    </p:confirmDialog>
</h:form>

BackingBean

@ManagedBean
@RequestScoped
public class ButtonBean {

    boolean showConfirm = false;

    public boolean isShowConfirm() {
        return showConfirm;
    }

    public void setShowConfirm(boolean showConfirm) {
        this.showConfirm = showConfirm;
    }

    public void overrideVersion() {
        System.out.println("Version alrady exists...Overriding...");
        FacesMessage msg = new FacesMessage("Action is successful");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void getConfirmMsg() {
        System.out.println("Inside getConfirmMsg()....");
        showConfirm = true;
        System.out.println("showConfirm: " + showConfirm);
    }
}

当我点击“确定”时,动作不会触发。 上述代码中是否有错误?


在服务器上处理期间无法从客户端获得确认。

你有两个选择:

  • 在调用您的操作方法之前获取覆盖权限,例如使用复选框“覆盖文件如果存在?” 要么

  • 您必须停止处理,设置一个标志并返回null以重新加载浏览器中的当前页面。 然后,您可以根据标志状态显示p:dialog


  • 您正面临典型的Primefaces问题。

    当你的页面显示出来并且buttonBean.showConfirm = false时,这个元素不会被渲染。 这意味着它不会出现在DOM树中。 不管你以后做什么,都不能显示或隐藏不存在的元素。

    实际上有两种方法可以解决你的问题。

  • 使用远程命令,以便未呈现的HTML代码将从您的服务器传输。
  • 使用css“display:none”而不是rendered =“false”。

  • 我面临非常类似的问题。 我想出的解决方案是将逻辑分成2个 - 首先,按下按钮时,使用'action'准备验证数据并使用'oncomplete'运行远程命令,显示确认对话框,其中' OK'是真正的行动。

    链接地址: http://www.djcxy.com/p/52245.html

    上一篇: How to display a confirmation dialog(Primefaces) from backing bean

    下一篇: Events in Zend Framework application