2016-11-14 2 views
1

В форме, у меня есть раздел со списком объектов:Конфликт между обязательным атрибутом для проверки и добавить кнопку, чтобы добавить новый элемент в JSF форме

<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> 

Пользователь может добавить новый элемент в списке, нажав кнопку добавления (вызовите java-функцию в классе действий и отрисуйте раздел).

Валидатор работает нормально, но когда пользователь хочет добавить новый элемент etude, поле ввода для конечной даты связывается только с первым элементом, и для всего нового элемента нет поля конечной даты, и валидация принимает только только одна дата окончания в форме.

Когда я пытаюсь удалить атрибут привязки, кнопка добавления работает нормально (каждый элемент имеет конечную дату), но, конечно, проверка не работает больше, потому что никакой атрибут привязки не включает в себя нулевое значение, отправляемое функции.

Я не знаю, как исправить это. У кого-нибудь есть идея? Спасибо заранее.

ответ

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="rsqEtdDateFin#{myAction.listEtude.indexOf(etude)}" 
binding="#{requestScope[rsqEtdDateFin]}" 
Смежные вопросы