Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation JSF如何将验证限制为打开accordion选项卡_Validation_Jsf_Primefaces - Fatal编程技术网

Validation JSF如何将验证限制为打开accordion选项卡

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

我的每个选项卡都有一个数据表、一个输入和一个添加按钮。当我单击add按钮时,在打开和关闭的选项卡上进行验证。我在“打开”选项卡中看到关闭选项卡的错误。是否有办法使验证仅在“打开”选项卡中进行

<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">&#160;</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);
        }
  }