我想动态选择一个facelet来渲染我的数据列表中的一些项目.第一次尝试将是:
<ui:repeat value="#{panels}" var="panel">
<ui:include src="#{panel.facelet}">
</ui:repeat>
但是因为ui的src所以它不会起作用:include太早评估了.facelet信息是真正动态的,所以我不能使用c:forEach(不是真的建议与facelets混合使用).我想这一切都归结为找到一个基于ui的组件:包括替代品.
是否有这样的事情或者我需要自己编写?
小智 5
我想我已经找到了您一直在寻找的相对简单的解决方案。
我也从像您一样的ui:repeat里面的ui:include开始,但是我接受我必须使用ac:forEach,并且c:forEach非常适合动态获取一组不同的xhtml / components甚至包括用户交互改变了View中的事物,就像我认为的那样。它看起来像这样:
<c:forEach var="thing" items="#{view.things}">
<ui:include src="#{thing.renderComponent}">
<ui:param name="thing" value="#{thing}"/>
</ui:include>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但是,我的ui:param无法正常工作-我包含的每个组件都传递了相同的“事物” /对象,即使我们成功地使用了不同的事物/对象来动态包含不同的组件也是如此。
从那时起,我发现这篇文章启发了我将ui:include包装在af:subview中。现在,使用以下代码,一切正常。
<c:forEach var="thing" items="#{view.things}" varStatus="loop">
<f:subview id="thing_#{loop.index}">
<ui:include src="#{thing.renderComponent}">
<ui:param name="thing" value="#{thing}"/>
</ui:include>
</f:subview>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5324 次 |
| 最近记录: |