为什么我的h:消息中的特定ID无法在动态表单中正确显示?更多描述

时间:2013-01-09 15:41:51

标签: java jsf jsf-2

我有一个表单,用户可以从表单中动态添加和删除一组表单字段(名字,姓氏和电子邮件)。这部分工作正常,但我当然需要对这些字段进行一些验证,如果我只使用第一组字段提交表单,那么它的工作效果很好,我会对每个字段进行验证。一旦我添加了下一组字段并提交,我就会在第一组上获得验证消息,而在第二组中只有一个字段。我不确定发生了什么,但这里是.xhtml文件的样子:

<h:form>
    <ui:repeat var="i" value="#{bean.list}">
        <h:panelGrid columns="5" rowClasses="newRoow">
             <h:inputText id="firstName" value="#{i.first_name}"
             required="true" requiredMessage="Please enter a First Name" />
             <h:inputText id="lastName" value="#{i.first_name}"
             required="true" requiredMessage="Please enter a LastName" />
             <h:inputText id="email" value="#{i.first_name}"
             required="true" requiredMessage="Please enter an Email Address"> />
             <h:commandButton value="+">
                 <f:ajax event="click" render="@form" 
                 listener="#{bean.addItemFromList}" />
             </h:commandButton>
             <h:commandButton value="-">
                 <f:ajax event="click" render="@form" 
                 listener="#{bean.removeItemFromList(i)}" />             
             </h:commandButton>

             <h:message for="firstName" errorClass="warnings" showSummary="true" />
             <h:message for="lastName" errorClass="warnings" showSummary="true" />
             <h:message for="email" errorClass="warnings" showSummary="true" />
        </h:panelGrid>
    </ui:repeat>

    <h:commandButton value="Submit"
    actionListener="#{bean.someFunction}"
    action="nextPage" />
</h:form>

关于为什么会失败的任何想法?

使用第一个字段集,它可以正常工作,如您所见:http://i.imgur.com/uMrrO.png验证位于每个字段下方。

使用第二个及以下字段集时,它看起来像这样:http://i.imgur.com/FeZ3T.png或者有点不同,因为每次按下添加按钮时它似乎都会再验证一个字段。

2 个答案:

答案 0 :(得分:1)

我后来发现,这不是我为此问题编写的代码/标记的问题,而是来自包含的.js文件。此.js中包含一些代码,其中包含class="warnings"标记生成的所有元素。

答案 1 :(得分:0)

此处提交整个表单时,同一表单中的两个组件都将被提交,因此您将收到验证错误消息。