【发布时间】:2014-12-18 23:18:43
【问题描述】:
我有一个非常简单的 JSF 2/Facelets 页面,如下所示:
<ui:repeat value="#{myBean.names}" var="_name">
<h:commandLink value="#{_name}" action="#{myBean.sayHello(_name)}">
<f:ajax execute="@this"/>
</h:commandLink>
<br/>
</ui:repeat>
支持 bean 提供一个带有名称的 java.util.List<String>,而操作方法只是将 "hello <name>" 消息打印到标准输出。
这很好用。我在浏览器中获得了一个名称列表,单击会触发向指定名称打招呼的操作方法。
问题出现了,当我想将此代码放入执行迭代并通过构面呈现实际链接的复合组件中时:
<ui:component xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:cc="http://xmlns.jcp.org/jsf/composite">
<cc:interface>
<cc:attribute name="value" type="java.util.List" required="true" />
<cc:facet name="content" />
</cc:interface>
<cc:implementation>
<ui:repeat value="#{cc.attrs.value}" var="_name">
<cc:renderFacet name="content"/>
</ui:repeat>
</cc:implementation>
</ui:component>
我是这样使用复合组件的:
<my:myComp value="#{bean.names}">
<f:facet name="content">
<h:commandLink value="#{_name}" action="#{bean.sayHello(_name)}">
<f:ajax execute="@this"/>
</h:commandLink>
<br/>
</f:facet>
</my:myComp>
在浏览器中,我得到一个与以前完全一样的名称列表。但是现在单击链接会呈现"hello null" 消息。所以_name 在<h:commandLink> 的value 属性中被正确解析,但在action 属性中却没有。
我也尝试使用actionListener 代替action 或<f:ajax> 标记中的listener 属性,没有区别。
有人可以对这个问题有所了解吗?
我的环境:
- WildFly 8.1 与
- JSF 2.2.6 (Mojarra)
【问题讨论】: