2011-09-15 11 views
1

複合コンポーネントでコンポーネントを飾る良い方法があるのでしょうか?コンポジットコンポーネントの標準コンポーネントをデコレートし、属性を継承する方法は?

例:

<composite:implementation> 
    <div style="someFancyClass"> 
     <h:inputText value="#{cc.attrs.value}" /> 
    </div> 
</composite:implementation> 

この場合、値属性が含ま<h:inputText>に通過させます。しかし、他のすべての属性はどうですか? <composite:interface>セクションにすべてを宣言しなければなりませんか?

標準コンポーネントからある種の継承があるといいでしょう。 <h:inputText>というmaxlength属性が複合コンポーネントで自動的に使用可能になります。

答えて

1

<composite:interface>セクションですべてを宣言する必要はありますか?

必要がない、あなただけの<composite:attribute>としてそれを宣言する必要がなくmaxlength="#{cc.attrs.maxlength}"を使用することができます。しかし、これはドキュメンテーションの目的では悪いことです。開発者は、この属性がコンポジットコンポーネントのドキュメント(IDEオートコンプリートなどで使用される可能性があります)に表示されることはありません。


例えばそのように、標準コンポーネントからの継承のいくつかの種類を持っていいだろう<h:inputText>というmaxlength属性が複合コンポーネントで自動的に使用可能になります。

これはできません。そのためには、本当に完全なカスタムUIInputコンポーネントやRendererを作成する必要があります(具体的には、レンダラーだけで十分です)。

+0

答えがThxの場合は正しいですが、レンダラは上記の単純なケースでは適切でしょう。しかし、私がバッキングクラスでそれをやらなければならない場合は、属性マップの要素をネストされたの属性にコピーすることができます。どの方法が正しいでしょうか? decode()またはコンポーネントがpostAddToViewEventに応答する必要がありますか?私はそれについて興味があるだけです。 – Darkspirit

0

私はここにhttps://stackoverflow.com/a/8881510/1151983

を複合コンポーネントを装飾する方法についての例を提供しかし、これは本当の継承が、同様の複合コンポーネントのセットの間で共通のものを共有する方法を提供していません。

関連する問題