用于验证的绑定属性与添加按钮以在 jsf 表单中添加新项目之间的冲突
Conflict between binding attribute for validation and add button to add new item in a jsf form
在表单中,我有一个包含对象列表的部分:
<c:forEach items="#{myAction.listEtude}" var="etude">
每个对象 etude
都有一个开始日期和一个结束日期。有一个自定义验证器(已存在于应用程序中)来验证开始日期是否在结束日期之前。
这是向您展示开始日期集团的摘录:
<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>
用户可以通过单击添加按钮在列表中添加新项目(在操作 class 中调用 java 函数并呈现该部分)。
验证器工作正常,但是当用户想要添加新项目时 etude
,结束日期的输入字段仅与第一个项目绑定,所有新项目都没有结束日期字段,并且验证仅采用表格中唯一的一个结束日期。
当我尝试删除绑定属性时,添加按钮工作正常(每个项目都有一个结束日期)但当然验证不再有效,因为绑定属性不涉及发送到函数的空值.
我不知道如何纠正这个问题。有人有想法吗?
提前致谢。
我尝试了这个 并且有效!这是解决方案:
在 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]}"
在表单中,我有一个包含对象列表的部分:
<c:forEach items="#{myAction.listEtude}" var="etude">
每个对象 etude
都有一个开始日期和一个结束日期。有一个自定义验证器(已存在于应用程序中)来验证开始日期是否在结束日期之前。
这是向您展示开始日期集团的摘录:
<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>
用户可以通过单击添加按钮在列表中添加新项目(在操作 class 中调用 java 函数并呈现该部分)。
验证器工作正常,但是当用户想要添加新项目时 etude
,结束日期的输入字段仅与第一个项目绑定,所有新项目都没有结束日期字段,并且验证仅采用表格中唯一的一个结束日期。
当我尝试删除绑定属性时,添加按钮工作正常(每个项目都有一个结束日期)但当然验证不再有效,因为绑定属性不涉及发送到函数的空值.
我不知道如何纠正这个问题。有人有想法吗? 提前致谢。
我尝试了这个
在 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]}"