2

コンポジットを使用してカスタムコンポーネントを実装しています。私のコンポジットコンポーネントのソースコードは次のとおりです。

<cc:interface componentType="selectOneRadio"
              xmlns="http://www.w3.org/1999/xhtml"   
              xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:attribute name="direction" default="next" />
</cc:interface>

ご覧のimplementationとおり、このセクションは使用していませんが、使用する必要がある場合は問題ありません。

次に、Javaを使用してコンテンツを次のようにレンダリングします。

public void encodeChildren(FacesContext context) throws IOException {
   ...
}

このコントロールは、「direction」という名前の属性の値に基づいて整数値を生成します。値が「next」の場合、生成された値はその月の現在の日に1を加えたものになり、値が「back」の場合、生成された値はその月の現在の日に1を引いたものになります。

<h:commandButton />カスタムコンポーネントの後に追加したユーザーをクリックしたときに、生成された値をバッキングBeanに渡すにはどうすればよいですか?

使用する必要があります<f:ajax />か?

ちなみに、他の質問ですが、複合コンポーネントをJavaでレンダリングする<cc:implementation />と同時に(ミキシング)できますか?

ありがとう。

4

1 に答える 1

0

メソッドでフォーム送信処理ジョブを実行する必要がありますdecode()

@Override
public void decode(FacesContext context) {
    // ...
}

ValueExpression継承されたgetValueExpression()メソッドによって、属性を として取得できます。を使用して「設定」操作を実行できますValueExpression#setValue()。例えば

<my:composite ... value="#{bean.foo}" />

ValueExpression value = getValueExpression("value");
value.setValue(context.getElContext(), newValue);

newValueによって表されるプロパティに応じて設定され#{bean.foo}ます。

于 2012-10-08T19:24:33.123 に答える