2016-11-14 7 views
1

を新しい項目を追加するためのボタンを追加し、私は、オブジェクトのリストのセクションがあります。検証のための結合属性間の紛争とJSFフォームにフォームで

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

各オブジェクトetudeが始まり、日付とAを持っています終了日。開始日が終了日より前であることを検証するカスタムバリデーター(すでにアプリケーションに存在します)があります。

これはあなたに開始日付圏を表示する抽出物である:

<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を追加したい場合、終了日の入力フィールドは最初の項目のみとバインドされ、すべての新しい項目の終了日フィールドはありません。フォームの終了日は1つだけです。

バインド属性を削除しようとすると、追加ボタンが正常に機能します(すべての項目に終了日があります)。ただし、バインディング属性にnull値が送信されないため、検証はもはや機能しません。

これを修正する方法がわかりません。誰にもアイデアはありますか? ありがとうございます。

答えて

0

私はこれを試してみてくださいsoluceそれは動作します! 、ちょうどc:forEach行の後

追加:これは解決され始める日付圏で

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

を、行変更:

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

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

をと最後に、終了日のIDとバインディングを変更します。

id="rsqEtdDateFin#{myAction.listEtude.indexOf(etude)}" 
binding="#{requestScope[rsqEtdDateFin]}" 
関連する問題