Beanに動的にコントロールを作成したい。JSF2.0を使用しています
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
HtmlOutputTag
の内容を設定するには、どのプロパティを設定する必要がありHtmlOutputTag
ますか?
はHtmlOutputTag
、コンポーネントではなくタグを表します。むしろ使用してHtmlOutputText
ください。次に、value
JSFページの実際のコンポーネントで行うのとまったく同じように、プロパティを設定できます。ValueExpression
生ではなく必要な場合はvalue
、を使用して作成する必要がありますExpressionFactory#createValueExpression()
。キックオフの例は次のとおりです。
HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));
ここでの便利な方法は次のcreateValueExpression()
ようになります。
private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().getExpressionFactory()
.createValueExpression(context.getELContext(), valueExpression, valueType);
}
いくつかのユーティリティクラスでそれを遠くに隠して、そのコードを何度も繰り返す必要がないようにします;)valueType
引数は明らかにプロパティの実際のタイプを表す必要があります。
JSFページの最終結果は次のようになります。
<h:outputText value="#{bean.property}" />
とはいえ、機能要件によっては、機能要件を解決するためのより優れた、よりクリーンな方法が実際に存在する可能性があります。必要に応じて、必要に応じてより良い方法を提案できるように、もう少し詳しく説明することができます。
いつものように、私のアドバイスは、コンポーネントを動的に追加/削除しないことです。別の方法で問題を解決します。
コンポーネントを動的に追加/削除することは常に問題の原因であり、別の方法ではるかに簡単にコンポーネントを追加できる可能性があります。
outputText
コンポーネントは使いやすいです:
<h:outputText value="#{BackingBean.myProperty}"/>
myProperty
そして、バッキングBeanでのゲッター/セッターを定義します。本当にプログラムで実行したい場合(強力な議論がない限り、これはお勧めしません)、動的テーブルを使用した例を次に示します。