Beanに動的にコントロールを作成したい。JSF2.0を使用しています
HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();
HtmlOutputTagの内容を設定するには、どのプロパティを設定する必要がありHtmlOutputTagますか?
はHtmlOutputTag、コンポーネントではなくタグを表します。むしろ使用してHtmlOutputTextください。次に、valueJSFページの実際のコンポーネントで行うのとまったく同じように、プロパティを設定できます。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でのゲッター/セッターを定義します。本当にプログラムで実行したい場合(強力な議論がない限り、これはお勧めしません)、動的テーブルを使用した例を次に示します。