2009-03-21 11 views
1

JSF 1.2を使用してカスタムコンポーネントを開発しています。私のタグクラスはUIComponentELTagを拡張し、データ型ValueExpressionの変数を持ちます。 これらの値は、タグの対応する属性から設定されています。 (使用のsetProperties機能) 例、JSF 1.2カスタムコンポーネント - バッキングビーンからのボディコンテンツ

<sr:show name="#{backingBean.name}" ...> #{backingBean.mainContent}</sr:show> 

私はバインディングの値として、タグののBodyContentを取得しようとすると、私はこだわっています。 これは私が進めてきたどのくらいです: これはのdoAfterBody(のコードです)

public int doAfterBody() throws JspException{ 
if(bodyContent!=null) { 
String body = bodyContent.getString(); 
FacesContext context = FacesContext.getCurrentInstance(); 
UIComponent component = super.findComponent(context); 
MyComp myComp= (MyComp) component; 
myComp.setMain(body); 

} 
bodyContent.clearBody(); 
return SKIP_BODY; 
}

タグのボディが結合値が含まれていない場合、このコードは正常に動作します。本文にバインディング値があるかどうかを確認し、その値をBeanから設定する必要があります。 JSF 1.1では、isValueReference(body)を使用してこれをチェックしました。 JSF 1.2でこれをどのように達成できますか?

体のコンテンツをどこでもバインディング値として取得する例は見つかりませんでした。私を助けてください。

ありがとうございました。

答えて

0

他の変数を単に追加するだけではいかがですか。 "コンテンツ"を作成し、それをレンダリングする本文にバインドしますか?

<sr:show name="#{backingBean.name}" text="#{backingBean.mainContent}" /> 

それとも単に:

<sr:show bean="#{backingBean} /> 

と全体の多くをレンダリングします。

+1

ユーザがBeanなしで直接値を提供したい場合は、タグ属性の一部として大量のコンテンツを入れることをお勧めしますか?(textContentのように、mainContentには巨大なコンテンツやxmlなどが含まれます)カスタムタグは、バインディング値と直接値の両方をサポートする必要があります。 –

+0

私はちょうどこの事を自分で学んでいます - ごめんなさい。どのように多くのロジックをフォーマットして対に応じて、これのためにfaceletsの構成コンポーネントを使用することができます。また、プレゼンテーションロジックを1つのタグに分割し、結果に変数を設定してから、他の要素をフォーマットに使用することができます。 –

+0

タグの本体にメインコンテンツを入力できるようにします。また、ValueExpressionをとることができる属性テキストも提供します。このようにして、ユーザは、フォーマットされたハードコーディングされたテキストをタグ本体に入力することができ、またはバッキングビーンからテキスト属性の値を提供することができる。私はこの解決策に落ち着いた。この情報が有用であると他の人が期待しています。 –

関連する問題