在托管bean的primefaces对话框中显示验证消息

时间:2014-01-29 12:31:25

标签: jsf-2 primefaces

我试图在对话框中显示在托管bean中完成验证结果的消息,但是在提交表单的对话框中没有显示它。

请帮我解决这个问题

带有对话框

的我的JSF页面代码段
<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true"
          appendToBody="true" resizable="true" modal="true" height="320px"
          width="38%">
    <h:form id="addLpc">
        <div align="center" style="margin-bottom: 1px; padding-bottom: 1px;">
            <h:outputLabel value="Add New LPC"
                           style="font-color:#000000;font-weight:bold;font-size:24px;padding-bottom:1px;"></h:outputLabel>
        </div>

        <div align="center">

            <p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true"
                        closable="true" />
            <p:messages id="lpcDlgMsg2" for="lpcDlgMessage" showDetail="false"
                        autoUpdate="true" closable="true" />
            <h:panelGrid id="addLpcForm" columns="2" appendToBody="true">

                <h:outputText value="LPC ID" />
                <p:inputText id="lpcId" value="#{lpcBean.lpcId}" required="true"
                             requiredMessage="LPC ID is required">
                    <f:ajax event="blur" render="lpcDlgMsg" />
                </p:inputText>

                <h:outputText value="First Name" />
                <p:inputText id="firstName" value="#{lpcBean.firstName}" />
                .
                .
                .
                .
            </h:panelGrid>
        </div>
        <div align="center">
            <p:commandButton id="submitButton" value="Submit" ajax="true"
                             update=":lpcForm:lpcDataTable,addLpc"
                             action="#{lpcBean.formSubmit}" oncomplete="dlg.hide()" />
            <p:commandButton id="cancelButton" value="Cancel" 
                             onclick="dlg.hide()" />

        </div>
    </h:form>
</p:dialog>
带有 lpcDlgMsg2

消息是我尝试在提交时显示的消息。其他消息在模糊时显示正确。

提交

时调用的方法的片段
public void formSubmit()

{
        if(resultSet.next())
        {

            int lpcIdCount=rs.getInt("lpcCount");
            if(lpcIdCount!=0)
            {
                FacesContext.getCurrentInstance().addMessage("lpcDlgMessage", new FacesMessage(FacesMessage.SEVERITY_ERROR," ", "Duplicate LPCID"));
                System.out.println("after display");
            }
            else
            {
                .
                .
                .
                .
            }

        }
    }   

}

2 个答案:

答案 0 :(得分:2)

这是我的建议:

<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true"
          appendToBody="true" resizable="true" modal="true" height="320px"
          width="38%">
    <h:form id="addLpc">
        <div align="center">
            <p:messages id="lpcDlgMsg" showDetail="false" autoUpdate="true"
                        closable="true" />
            <h:panelGrid id="addLpcForm" columns="2" >
                <h:outputText value="LPC ID" />
                <p:inputText id="lpcId" required="true" />
                <h:outputText value="First Name" />
                <p:inputText id="firstName" required="true" />
            </h:panelGrid>
        </div>
        <div align="center">
            <p:commandButton id="submitButton" value="Submit" 
                             oncomplete="if (!args.validationFailed){dlg.hide();}" />
            <p:commandButton id="cancelButton" value="Cancel" 
                             onclick="dlg.hide()" />
        </div>
    </h:form>
</p:dialog>

注意我已简化您的代码以避免使用managedbean。

如果您希望托管bean执行验证,请使用 RequestContext 有条件地执行将关闭对话框的代码,并从提交<中删除 oncomplete / strong>按钮。

if (success) {
    RequestContext.getCurrentInstance().execute("dlg.hide()");
}else{
    //show all the messages you need here
}

答案 1 :(得分:0)

您必须先在头标记

中添加此javascript
function handleComplete(xhr, status, args) {
        if (!args.validationFailed) {
            dlg.hide();
        } else {
        }
    }

更多更改

<p:commandButton id="submitButton" value="Submit" ajax="true"
  update=":lpcForm:lpcDataTable,addLpc :lpcDlgMsg2"
  actionListener="#{lpcBean.formSubmit}" oncomplete="handleComplete(xhr, status, args)" />

action to actionListener,因为action具有String返回类型。 这样可以正常工作。