Primefaces显示两条消息而不是一条消息用于ajax模糊事件

时间:2014-01-28 07:11:53

标签: ajax jsf-2 primefaces

我有一行可编辑的数据表。我已将电子邮件验证实施到其中一个列,其中错误消息必须显示在电子邮件字段的模糊上。这工作正常。我有一个对话框,表单将显示在同一页面中。使用on blur事件也可以对此表单执行验证。对话框验证消息在模糊时显示,但主表单也显示相同的验证消息。这不应该发生。

JSF页面

<h:form id="lpcForm">

    <div id="content">

        <p:commandLink id="cmdLinkDelete" value="Delete"
            style="font-size:15px;padding-left:15px;" ajax="true"
            action="#{lpcBean.deleteRecords}" update=":lpcForm:lpcDataTable" />
        &nbsp;&nbsp;
        <p:commandLink id="cmdLinkAdd" value="Add" style="font-size:15px;"
            onclick="dlg.show()" />


        <p:messages id="lpcInfoMsg" for="lpcInfoMessages" showDetail="true"
            autoUpdate="true" closable="true" />
        <p:messages id="lpcErrMsg" showDetail="false" redisplay="false"
            styleClass="messagesClass" autoUpdate="true" closable="true" />

        <p:dataTable var="lpcData" id="lpcDataTable" widgetVar="lpcTable"
            value="#{lpcBean.lpcItems}" selection="#{lpcBean.selectedRows}"
            editable="true" scrollable="true" scrollWidth="80%"
            rowKey="#{lpcData.LPCID}" rendered="true"
            scrollHeight="75% important!" resizableColumns="true"
            tableStyle="table-layout:auto;width:100% important!; height:100% important!;padding-left:15px important!;"
            styleClass="datatable">

            <p:ajax event="rowEdit" listener="#{lpcBean.onEdit}" />
            <p:ajax event="rowEditCancel" listener="#{lpcBean.onCancel}" />
            <p:column selectionMode="multiple" style="width:15px" />


            <p:column headerText="LPC ID" style="width:20px"
                sortBy="#{lpcData.LPCID}">
                <h:outputText value="#{lpcData.LPCID}" />
            </p:column>



            <p:column headerText="Email" style="width:75px"
                sortBy="#{lpcData.email_Address}">
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{lpcData.email_Address}" />
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{lpcData.email_Address}" style="width:100%"
                            label="emailAddress" validatorMessage="Invalid Email Format">
                            <f:validateRegex
                                pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
                            <f:ajax event="blur" render=":lpcForm:lpcErrMsg" />
                        </p:inputText>
                    </f:facet>
                </p:cellEditor>
            </p:column>
                .
                .
                .
                .
                .

            <p:column style="width:10px">
                <p:rowEditor />
            </p:column>

        </p:dataTable>
        <p:blockUI block="lpcDataTable" trigger="cmdLinkDelete,cmdLinkAdd">  
    LOADING<br />
            <p:graphicImage value="/images/ajaxLoader.gif" />
        </p:blockUI>

    </div>
</h:form>


<p:dialog header="Add LPC" id="lpcDlg" widgetVar="dlg" rendered="true"
    appendToBody="true" resizable="true" modal="true">
    <h:form id="addLpc">

        <div align="center">

            <p:messages id="lpcDlgMsg"  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">
                    <f:ajax event="blur" render="lpcDlgMsg" />
                </p:inputText>
                .
                .
                .
                .
                .
            </h:panelGrid>
        </div>
        <div align="center">
            <p:commandButton id="submitButton" value="Submit" ajax="true"
                update=":lpcForm:lpcDataTable" action="#{lpcBean.formSubmit}"
                oncomplete="dlg.hide()" />
            <p:commandButton id="cancelButton" value="Cancel" ajax="true"
                onclick="dlg.hide()" />

        </div>
    </h:form>
</p:dialog>

当电子邮件格式错误时,ID为 lpcErrMsg 的消息是我在主页面中显示模糊的消息。此消息也会显示对话框字段验证,尽管我从未提及过这个id将在对话框中呈现。

ID为 lpcDlgMsg 的消息是我在blurll上显示widgetvar dlg 的对话框中显示的消息。到目前为止,我已经为第一个实现了模糊事件验证对话框中的必需字段。

2 个答案:

答案 0 :(得分:0)

单程<p:messages ... globalOnly="false" />。其他方法是使用<p:ajax ... listener="#{bean.renderMethod}" /><p:messages ... rendered="#{bean.render}" />。 renderMethod用于将布尔渲染设置为true或false。

答案 1 :(得分:0)

我认为问题出在autoUpdate =“true”上。只需根据需求更新消息ID。