如何获取ui:uram:在JSF ManagedBean中包含在c:forEach中的包含?

时间:2012-07-02 05:55:39

标签: java jsf facelets

  

可能重复:
  How to pass parameters to ui:include that inside of c:forEach tag

这一个(How do I set Managed Bean field to the value of a ui:param?)运作良好。如果我循环使用ui:include在JST的帮助下c:forEach,Facelet属性(ui:param)总是解析为null。

<c:forEach items="#{myList} var="myItem">
    <ui:include src="#{myItem.myPage}">
        <ui:param name="myVar" value="#{myItem.myData}"/>
    </ui:include>   
</c:forEach>

我正在尝试解决JSF Managed Bean中的Facelet属性(专门针对一个ui:include每个JSF视图)

FacesContext facesCtx = FacesContext.getCurrentInstance();
FaceletContext faceletCtx = (FaceletContext) facesCtx.getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
Object myVar = faceletCtx.getAttribute("myVar");

只要我没有循环(没有c:forEach),这种方法效果很好。但在引入c:forEach后,myVar始终为null。

什么是JSTL c:forEach更改facelet属性(名称)?我怎样才能在我的Backing Bean中访问它们?

不幸的是,FaceletContext没有公开任何列出所有facelet属性的方法,所以我可以自己“找到”它们......:S

1 个答案:

答案 0 :(得分:1)

事情是c:forEach不适合与JSF一起使用。这就是为什么我们<ui:repeat>基本上相同,但它是JSF组件树的一部分。进一步说明here