动态ui:包括ui内部:重复.有简单的解决方案吗?

mre*_*isz 6 java jsf facelets

我想动态选择一个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)


Dud*_*lul 2

c:forEach就能解决,为什么不能用呢?

关于该问题的有趣文章: https ://rogerkeays.com/jsf-c-foreach-vs-ui-repeat