2

Beanに動的にコントロールを作成したい。JSF2.0を使用しています

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

HtmlOutputTagの内容を設定するには、どのプロパティを設定する必要がありHtmlOutputTagますか?

4

2 に答える 2

6

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}" />

とはいえ、機能要件によっては、機能要件を解決するためのより優れた、よりクリーンな方法が実際に存在する可能性があります。必要に応じて、必要に応じてより良い方法を提案できるように、もう少し詳しく説明することができます。

于 2010-03-13T22:34:19.463 に答える
1

いつものように、私のアドバイスは、コンポーネントを動的に追加/削除しないことです。別の方法で問題を解決します。

  • コンポーネントの可視性を切り替えます
  • コンポーネントに属するデータを再バインドする

コンポーネントを動的に追加/削除することは常に問題の原因であり、別の方法ではるかに簡単にコンポーネントを追加できる可能性があります。

outputTextコンポーネントは使いやすいです:

<h:outputText value="#{BackingBean.myProperty}"/>

myPropertyそして、バッキングBeanでのゲッター/セッターを定義します。本当にプログラムで実行したい場合(強力な議論がない限り、これはお勧めしません)、動的テーブルを使用した例を次に示します。

于 2010-03-13T20:16:50.473 に答える