如何使p:消息保留消息,直到错误得到修复

时间:2013-06-27 09:35:01

标签: validation jsf-2 primefaces messages

我在对话框中验证了三个组件,组件的onblur如下:

<p:message for="idEstNumOfUser" display="icon" id="msgEstNumOfUser" />
<p:inputText id="idEstNumOfUser"
        placeholder="Estimated Number of Users"
        value="#{mybean.estimatedUserCount}" required="true" requiredMessage="Estimated Number of Users Is Required"
        maxlength="8" title="Estimated Number of Users"
        validatorMessage="Please enter digits only for 'Estimated Number of Users'"
        converterMessage="Please enter digits only for 'Estimated Number of Users'">
        <f:convertNumber />
<p:ajax event="blur" update=":betasignup:msgEstNumOfUser" />
</p:inputText>


<p:message for="idTxtFirstName" display="icon" id="msgFirstName" />
<p:inputText id="idTxtFirstName" placeholder="First Name"
    value="#{mybean.firstName}" required="true"
    requiredMessage="First Name Is Required" maxlength="100"
    title="First Name">
    <p:ajax event="blur" update=":betasignup:msgFirstName" />
</p:inputText>

<p:message for="idTxtLastName" display="icon" id="msgLastName" />
<p:inputText id="idTxtLastName" placeholder="Last Name"
    value="#{mybean.lastName}" required="true"
    requiredMessage="Last Name Is Required" maxlength="100"
    title="Last Name">
    <p:ajax event="blur" update=":betasignup:msgLastName" />
</p:inputText>

<p:messages id="messages"  autoUpdate="true"/>

我的bean有视图范围。

CASE:将第一个字段留空并导航到第二个字段时p:消息显示第一个字段的消息,当第二个字段为空并导航到第三个字段时,p:消息首先清除消息字段并仅显示第二个字段的消息,我希望它保留旧消息(并在仅修复错误的情况下删除错误消息)并显示两个验证消息,因为第一个字段和第二个字段当前有验证错误。

编辑:对话框代码

<h:form id="betasignup" title="#{msg['betasignup.text']}">
            <p:dialog id="dlgSignUp" widgetVar="signUpDialog" resizable="false"
                modal="true" header="#{msg['betasignup.header']}" styleClass="sign-up-dialog">

我如何显示对话框:

<p:commandLink id="iam_interested2" styleClass="iam_interested"
                        oncomplete="signUpDialog.show()"
                        actionListener="#{myBean.init()}"
                        update=":betasignup">

请告知,谢谢。

1 个答案:

答案 0 :(得分:0)

使用process="@form"设置每个ajax更新标记。我怀疑为什么一次只为一个组件显示验证消息的原因是每个ajax请求只处理一个组件。因此,一次只有一个组件验证失败,并且只有一个验证消息将排队。通过设置每个组件,您将确保表单中的每个组件在处理期间通过验证,并且它们各自的验证器将启动。