11

JSF 2で単純なメニュー複合コンポーネントを作成していますが、<h:commandLink>のアクション属性で使用するString属性を複合コンポーネントに渡すことができません。私のコンポーネントは次のようになります:

<composite:interface>
    <composite:attribute name="title" required="true" type="java.lang.String"/>
    <composite:attribute name="view" required="true" />
</composite:interface>

<!--implementation-->
<composite:implementation>
    <li><h:commandLink action="#{cc.attrs.view}" value="#{cc.attrs.title}" /></li>
</composite:implementation>

<h:commandLink>のaction属性にアクション文字列を取得するにはどうすればよいですか?

4

2 に答える 2

23

これはホルストマンを引き付けるように見えます:-)

属性に「action」という名前を付け、リターゲティングを使用する必要があります。次に、いくつかの特別なハンドリングキックが絶妙な明快さで説明されています(ではありません)

http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/composite/attribute.html

リンクを貼り付けることが許可されていないViewDeclarationLanguage.retargetMethodExpressions(ViewHandlerではない)のAPIドキュメント。

これがあなたのやり方です。

<composite:interface>
    <composite:attribute name="title" required="true" type="java.lang.String"/>
    <composite:attribute name="action" targets="view" required="true" />
</composite:interface>

<!--implementation-->
<composite:implementation>
    <li><h:commandLink id="view" value="#{cc.attrs.title}" /></li>
</composite:implementation>
于 2010-06-24T13:49:43.540 に答える
1

次のようなメソッドになるように属性のタイプを定義する必要があります。

<composite:attribute name="view" method-signature="java.lang.String f()"/>

または、一部の属性名はjsfで特別に処理されます。したがって、属性に「action」という名前を付けると、method-signatureがなくても機能するはずです。

<composite:attribute name="action"/>

編集:私はおそらく質問を誤解しました。アクションを呼び出さずにビューIDにリンクしたい場合は、次のh:link代わりにタグを使用できh:commandLinkます。

<h:link outcome="#{cc.attrs.view}" value="#{cc.attrs.title}"/>
于 2010-05-17T21:43:15.683 に答える