Validation JSF如何将验证限制为打开accordion选项卡
我的每个选项卡都有一个数据表、一个输入和一个添加按钮。当我单击add按钮时,在打开和关闭的选项卡上进行验证。我在“打开”选项卡中看到关闭选项卡的错误。是否有办法使验证仅在“打开”选项卡中进行Validation JSF如何将验证限制为打开accordion选项卡,validation,jsf,primefaces,Validation,Jsf,Primefaces,我的每个选项卡都有一个数据表、一个输入和一个添加按钮。当我单击add按钮时,在打开和关闭的选项卡上进行验证。我在“打开”选项卡中看到关闭选项卡的错误。是否有办法使验证仅在“打开”选项卡中进行 <p:accordionPanel id="pnl_accord_codetables" dynamic="true" cache="false"> <p:ajax event="tabChange" listener="#{pc_Maintenence.onTabChan
<p:accordionPanel id="pnl_accord_codetables" dynamic="true" cache="false">
<p:ajax event="tabChange" listener="#{pc_Maintenence.onTabChange}" immediate="true"/>
<c:forEach items="#{pc_Maintenence.codeMaintenenceTables}" var="codetable">
<p:tab title="#{codetable.tableName}">
<util:datatable_util dataTableTemplate="#{codetable}"
dataTableList="#{pc_Maintenence.getDataTableList(codetable.tableList_managedBeanName.concat('.').concat(codetable.tableList_propertyName))}"
dataTableListItem="#{pc_Maintenence.getDataTableListItem(codetable.tableList_rowItemClassName, codetable)}"
actionMethodsBean="#{pc_Maintenence}"
buildMessagePanel="true"/>
</p:tab>
</c:forEach>
</p:accordionPanel>
为什么要使用
c:forEach
?在p:accordionPanel
上有属性value
和var
,您可以使用这些属性在列表上迭代以显示动态选项卡。您想提交所有选项卡的数据还是只提交打开的选项卡的数据?我还在复合代码中使用primefaces数据表。我没有展示代码来简化问题。我使用for each是因为在使用accordionPanel的value和var以及primeface的columns标记时存在一个bug。动态构建的第二个表的第一行包含来自构建的第一个表的数据,第三个表的第一行包含第二个表的数据,依此类推。repeat标签也有同样的问题。当我把它放在一个for-each中时,问题就消失了。我只想验证打开的选项卡。
<p:panel id="pnl_add" rendered="#{cc.attrs.dataTableTemplate.addRow}">
<ui:repeat value="#{cc.attrs.dataTableTemplate.columns}" var="column">
<p:outputLabel styleClass="outputLabel" value="#{column.heading}"
for="inputtext" rendered="#{column.inputForAddingRecord}"/>
<p:inputText value="#{(cc.attrs.dataTableListItem)[column.name]}"
rendered="#{column.inputForAddingRecord}" id="inputtext"
required="#{not empty param[cc.add.clientId] and column.required}"
validator="#{column.validate}"/>
<div class="clear"> </div>
</ui:repeat>
</p:panel>
<p:panel id="pnl_commandbuttons">
<p:commandButton styleCl2ass="commandButton"
rendered="#{cc.attrs.dataTableTemplate.addRow}"
binding="#{cc.add}"
action="#{cc.attrs.actionMethodsBean.addRowAction(cc.attrs.dataTableTemplate)}"
value="Add"
update="pnl_datatable pnl_add pnl_msg @parent"
title="Add">
<p:collector value="#{cc.attrs.dataTableListItem}" addTo="#{cc.attrs.dataTableList}" />
</p:commandButton>
<p:commandButton styleClass="commandButton"
rendered="#{cc.attrs.dataTableTemplate.addRow or cc.attrs.dataTableTemplate.editable}"
action="#{cc.attrs.actionMethodsBean.submitAction(cc.attrs.dataTableTemplate)}"
value="Submit"
update="pnl_datatable pnl_add pnl_msg @parent"
title="Submit">
</p:commandButton>
</p:panel>
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
ResourceBundle resource = (ResourceBundle)getManagedBean("regex");
String pattern = resource.getString(this.regexName);
if(pattern != null){
RegexValidator regexValidator = new RegexValidator();
regexValidator.setPattern(pattern);
regexValidator.validate(context, component, value);
}
}