没有RichFaces的JSF 2部分验证

时间:2014-03-08 14:56:53

标签: validation jsf jsf-2

我有下一个jsf表格,有2个部分

1)标题表格 2)数据表字段

我想要对2个部分添加验证,但是当我发布标题表格时,不需要验证datatable,当我更新行数据表时,不需要验证标题表单。我的问题是,当我发布更新行数据表时,jsf想验证标题表单..

我的问题是...... 仅使用没有富面或其他库的JSF 2实现,如何使用jsf来验证部分表单?管理子表单的最佳方法是什么?

谢谢,

这是我的示例代码

 <h:form styleClass="horizontal-form" id="form">

                <h:messages></h:messages>
                <h3>
                    <h:outputText value="#{msgs.title}"></h:outputText>
                </h3>
                <table>
                    <tr>
                        <td><h:outputLabel for="userName" id="nameLbl">Name</h:outputLabel></td>
                        <td><h:inputText id="userName" value="#{actionBean.name}"
                                styleClass="form-control" required="true" /> <h:message
                                for="userName"></h:message></td>
                    </tr>
                    <tr>
                        <td>Monto:</td>
                        <td><h:inputText id="userAmount" value="#{actionBean.amount}"
                                label="Edad" /> <h:message for="userAmount"></h:message></td>
                    </tr>


                </table>

                <div>
                    Datatable
                    <h:dataTable value="#{actionBean.items}" var="item" id="datatable">
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Nombre"></h:outputText>
                            </f:facet>
                            <h:outputText value="#{item.data.name}" rendered="#{!item.edit}"></h:outputText>
                            <h:inputText id="inputName" value="#{item.editData.name}" required="true"
                                rendered="#{item.edit}"></h:inputText>
                        </h:column>
                        <h:column>
                            <f:facet name="header">
                                <h:outputText value="Actions"></h:outputText>
                            </f:facet>
                            <h:commandButton value="Edit"
                                action="#{actionBean.edit(item)}" rendered="#{!item.edit}"
                                immediate="true" styleClass="btn btn-sm btn-primary">
                                <f:ajax execute="form" render="form" />
                            </h:commandButton>

                            <h:commandButton value="Update"
                                action="#{actionBean.update(item)}" rendered="#{item.edit}"
                                styleClass="btn btn-sm btn-primary ">
                                <f:ajax execute="datatable" render="form" />
                            </h:commandButton>
                        </h:column>
                    </h:dataTable>
                </div>

                <p>
                    <h:commandButton value="Login" action="#{actionBean.count}"
                        styleClass="btn btn-sm btn-primary">
                        <f:ajax execute="form" render="form datatable_form" />
                    </h:commandButton>
                    <h:commandButton value="Begin" action="index" immediate="true"
                        styleClass="btn btn-sm btn-primary" />
                </p>
            </h:form>

1 个答案:

答案 0 :(得分:1)

这可能正在发生,因为您正在尝试更新整个表单而不仅仅是数据表。

示例:

<h:commandButton value="Edit"
    action="#{actionBean.edit(item)}" rendered="#{!item.edit}"
    immediate="true" styleClass="btn btn-sm btn-primary">
    <f:ajax execute="form" render="form" />
</h:commandButton>

在这种情况下,你应该尝试执行/渲染你想要验证的数据,就像这样:

<h:commandButton value="Edit"
    action="#{actionBean.edit(item)}" rendered="#{!item.edit}"
    immediate="true" styleClass="btn btn-sm btn-primary">
    <f:ajax execute="datatable" render="datatable" />
</h:commandButton>