11

我正在 JSF 2 中创建一个简单的菜单组合组件。但是,我无法将字符串属性传递给组合组件以在 <h:commandLink> 的操作属性中使用。我的组件看起来像:

<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> 的操作属性中?

4

2 回答 2

23

看起来这吸引了 Horstmanns :-)

您必须将属性命名为“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”,它也应该在没有方法签名的情况下工作:

<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 回答