2011-10-10 12 views
2

内部入力フィールドを検証するJSFコンポジットに問題があります。 次のコードスニペットは、1つのコンポジットのみが含まれている限り動作します。JSF 2コンポジットと検証用のバインディング

<div id="#{cc.clientId}" > 
    <h:panelGroup styleClass="#{not firstname.valid ? 'fmError' : ''}"> 
    <div class="col220"> 
     <h:outputLabel for="firstname" value="Vorname(n):" /> 
    </div> 
    <div class="col220"> 
     <h:inputText id="firstname" styleClass="fmTxt " 
      value="#{cc.attrs.person.firstname}" binding="#{firstname}"> 
      <f:validateRequired /> 
     </h:inputText> 

    </div> 
    </h:panelGroup> 
</div> 

私はコンポジット、コンポジット内のコンポーネントのための固有のIDを有するラップするcc.clientIdを使っ見ることができるように。したがって、1つのページに複数のコンポジットを含めることは可能です。

問題は、検証とinputTextコンポーネントをバインドする必要から始まります。私はinputFieldだけでなく、ラベルを強調するためにpanelGroupのバリデーションの結果を尋ねるためにこれを必要とします。

ページ上に1つのコンポジットのみを使用する場合、このコードは完全に機能しています。 2番目のものを使用する場合、inputField 'firstname'はもう表示されません。私はそれがバインディングとハードコーディングされた '#{firstname}'と関係していると思います。

質問:バインディング属性の一意の識別子を作成するにはどうすればよいですか。

私は何かヒントに感謝しています。ありがとう!

答えて

3

固有のIDを持つエイリアスを作成し、要求スコープに格納することをお勧めします。

<div id="#{cc.clientId}"> 
    <ui:param name="firstname" value="#{cc.clientId}_firstname" /> 
    <h:panelGroup styleClass="#{not requestScope[firstname].valid ? 'error' : ''}"> 
    <div class="col220"> 
     <h:outputLabel for="firstname" value="Vorname(n):" /> 
    </div> 
    <div class="col220"> 
     <h:inputText id="firstname" styleClass="fmTxt " 
      value="#{cc.attrs.value}" binding="#{requestScope[firstname]}"> 
      <f:validateRequired /> 
     </h:inputText> 

    </div> 
    </h:panelGroup> 
</div> 
+0

ありがとう!これは素晴らしい作品です。 – nautiserv

+0

ようこそ。 – BalusC