2016-08-12 6 views
2

主にselectManyCheckboxコンポーネントで構成されるコンポジットコンポーネントがあります。それは一般的な方法で設計されなければならないとして、私はアヤックスこれは、原料のほとんどのために非常に適していますコンバーターを使用してコンポジットコンポーネント内のコンポーネントを参照する方法

<composite:insertChildren/> 

を使用して、呼び出し元のレベル等から取り扱い、選択項目に渡します。今私はコンバータでこの複合コンポーネントを使用する必要があります。コンバーター(OmnifacesのListConverterの一種)が常に必要なわけではありません(時には私は選択項目をバックアップする具体的なエンティティの値バインディングを持っていますが、時にはそうではありません)、私はそれを渡したいと思います(例えば、selectItems、ajaxイベントハンドリング)。

コンポジットコンポーネント内のコンポーネントを参照するには、コンバータタグの 'for'属性を使用する必要があります。少なくともそれは私が理解するものです。

残念ながら、どの値を使用するべきかわかりません。コンポジットコンポーネント(ネーミングコンテナ)の名前を含める必要がありますか?私はclientIdを使用する必要がありますか?私は多くの組み合わせを試みましたが、コンバータは呼び出されていません。コンバータのタグを複合コンポーネントの定義の中に入れたらすぐに動作します。

<composite:interface> 
    <composite:attribute name="value" required="true"/> 
</composite:interface> 

<composite:implementation> 
    [...] 
    <h:selectManyCheckbox id="#{cc.attrs.id}" value="#{cc.attrs.value}"> 
     <composite:insertChildren/> 
    </h:selectManyCheckbox> 
    [...] 
</composite:implementation> 

次のようにこのコンポーネントを使用する必要があります:

<my:selectManyCheckbox id="myComponent" value="..."> 
    <f:selectItems value="..."/> 
    <o:converter for="___" converterId="..."/> 
</my:selectManyCheckbox> 

おそらく誰かが私に与えられるべきであるどのような値ヒントを与えることができます

物事を簡単にするために、のは、私は、次のしていると仮定しましょう'for'属性に追加します。

答えて

2

私は自分自身で答えを見つけました。あなたは、次の

<composite:interface> 
    <composite:attribute name="value" required="true"/> 
    <composite:editableValueHolder name="input_component"> 
</composite:interface> 

<composite:implementation> 
    [...] 
    <h:selectManyCheckbox id="input_component" value="#{cc.attrs.value}"> 
     <composite:insertChildren/> 
    </h:selectManyCheckbox> 
    [...] 
</composite:implementation> 

重要な部分はeditableValueHolderタグで使用することができます。この複合コンポーネントを使用しているページから、今すぐ使用できます

<o:converter for="input_component" converterId="id_of_converter" /> 

これは私のために働く解決策です。私はこれが同じ問題を抱えている人たちを助けることを願っています

関連する問題