验证的绑定属性和添加按钮以在jsf表单中添加新项目之间的冲突

时间:2016-11-14 10:21:55

标签: jsf jsf-2 binding

在表单中,我有一个包含对象列表的部分:

<c:forEach items="#{myAction.listEtude}" var="etude">

每个对象etude都有一个开始日期和结束日期。有一个自定义验证器(已存在于应用程序中),用于验证开始日期是否在结束日期之前。

这是一个摘录,显示开始日期bloc:

<rich:calendar id="rsqEtdDateDebut" value="#{etude.rsqEtdDateDebut}">
    <f:attribute name="nomForm" value="Risques et expositions" />
    <f:attribute name="dateSup" value="#{rsqEtdDateFin}" />
    <f:validator validatorId="dateDebInfValidator" />
</rich:calendar>

稍后,结束日期集团:

<rich:calendar id="rsqEtdDateFin" binding="#{rsqEtdDateFin}" value="#{etude.rsqEtdDateFin}">
</rich:calendar>

用户可以通过单击添加按钮在列表中添加新项目(在操作类中调用java函数并呈现该部分)。

验证器工作正常,但是当用户想要添加新项目etude时,结束日期的输入字段仅与第一个项目绑定,并且所有新项目和验证都没有结束日期字段只接受表单中的唯一结束日期。

当我尝试删除绑定属性时,添加按钮工作正常(每个项目都有结束日期)但当然验证不再起作用,因为没有绑定属性涉及发送给函数的空值。 / p>

我不知道如何纠正这个问题。有没有人有想法? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我试试这个soluce并且它有效!这是解决方案:

c:forEach行之后,添加:

<ui:param name="rsqEtdDateFin" value="rsqEtdDateFin#{myAction.listEtude.indexOf(etude)}" />

在开始日期集合中,更改行:

<f:attribute name="dateSup" value="#{rsqEtdDateFin}" />

<f:attribute name="dateSup" value="#{requestScope[rsqEtdDateFin]}" />

最后,更改结束日期的ID和绑定:

id="rsqEtdDateFin#{myAction.listEtude.indexOf(etude)}"
binding="#{requestScope[rsqEtdDateFin]}"