ここでは非常に簡単なシナリオを示しています。しかし、複合コンポーネントとf:属性タグには何とか詰まっています。コードをできるだけシンプルに保つようにします。複合コンポーネント内でのf:属性の使用
複合コンポーネント:
<cc:interface name="button">
...
<cc:attribute
name="actionListener"
required="true"
method-signature="void f(javax.faces.event.ActionEvent)"
target="button"
shortDescription="The action listener for this button." />
...
</cc:interface>
<cc:implementation>
<ice:commandButton
...
actionListener="#{cc.attrs.actionListener}"
...>
<cc:insertChildren />
</ice:commandButton>
</cc:implementation>
...今、私たちは次のようにコンポーネントを使用します。
<ctrl:button
...
actionListener="#{bean.method}"
...>
<f:attribute name="objectId" value="#{someObject.id}" />
</ctrl:button>
今、私たちはアクションリスナメソッド内で "OBJECTID" 属性にアクセスする必要があります。私たちはすでに次のような形式を試みました:
public void method(ActionEvent event)
{
...
event.getComponent().getAttributes().get("objectId");
...
}
しかし、属性マップにはobjectIdが含まれていません。このアプローチに何か問題はありますか?この問題を解決するために推奨される方法は何ですか?
誰かが私たちを助けることができたらうれしいです。
ありがとうございます! SlimShady
Hey @BalusC :)私たちは現在JSF 2に移行中で、同様の問題に直面しています。私は2つの質問があります: 'f:setPropertyActionListener'はtargetを必要とし、spec TLDはタグの' name'属性をリストしません。 'target'を意味すると思いますか? – truemmer
@truemmer:Copypasteの間違い、はい:私はそれを修正しました。 – BalusC
2番目の質問を編集するには時間がかかりすぎました.-)次の質問は、2番目の解決策です。複合コンポーネントのインターフェイスに「action」という名前の属性を設定して、「target」を指定する必要があります。なぜJSF 2仕様でアクション・メソッドにパラメータを持たないことが必要なのでしょうか? – truemmer