我有一行可编辑的数据表。我已将电子邮件验证实施到其中一个列,其中错误消息必须显示在电子邮件字段的模糊上。这工作正常。我有一个对话框,表单将显示在同一页面中。使用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" />
<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 的对话框中显示的消息。到目前为止,我已经为第一个实现了模糊事件验证对话框中的必需字段。
答案 0 :(得分:0)
单程<p:messages ... globalOnly="false" />
。其他方法是使用<p:ajax ... listener="#{bean.renderMethod}" />
和<p:messages ... rendered="#{bean.render}" />
。 renderMethod用于将布尔渲染设置为true或false。
答案 1 :(得分:0)
我认为问题出在autoUpdate =“true”上。只需根据需求更新消息ID。