代码之家  ›  专栏  ›  技术社区  ›  mrembisz

动态用户界面:包括内部用户界面:重复。有简单的解决方案吗?

  •  6
  • mrembisz  · 技术社区  · 16 年前

    我想动态地选择一个facelet来呈现我的数据列表中的一些项目。第一次尝试是:

    <ui:repeat value="#{panels}" var="panel">
      <ui:include src="#{panel.facelet}">
    </ui:repeat>
    

    但由于ui:include的src被评估得太早,所以它无法工作。facelet信息是真正动态的,所以我不能使用c:foreach(也不建议与facelet混合使用)。我想这一切归根结底就是找到一个基于组件的用户界面:包含备选方案。

    有这样的东西吗?还是我需要自己写?

    3 回复  |  直到 11 年前
        1
  •  2
  •   DuduAlul    16 年前

    C:foreach会解决的,为什么不能用呢?

    关于这个问题的有趣文章: http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

        2
  •  4
  •   Community Mohan Dere    9 年前

    我想我找到了 相当地 您一直在寻找的简单解决方案。

    我也从一个ui开始:包括在一个ui中:和你的一样重复,但是我接受我必须使用一个c:foreach,而c:foreach对于动态获取一组不同的xhtml/组件非常有用,即使用户交互改变了视图中的东西,就像我认为的那样。看起来像这样:

    <c:forEach var="thing" items="#{view.things}">
            <ui:include src="#{thing.renderComponent}">
                <ui:param name="thing" value="#{thing}"/>
            </ui:include>
    </c:forEach>
    

    但是,我的ui:param不起作用-我包含的每个组件都被传递给同一个“thing”/对象,即使我们成功地使用了不同的东西/对象来动态包含不同的组件。

    当我发现 this 这篇文章激励我包装我的用户界面:包括在一个f: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>
    
        3
  •  0
  •   Java Drinker    16 年前

    我记得我曾经尝试过使用一个自定义标签和FaceLethandler等来做类似的事情。最后,所有的小渲染时间问题都使得它不值得这么做。注意我是( 现在仍然是:—(… )在JSF1.1中使用facelets,因此不确定这在以后的版本中是否更好。

    你需要处理多少种不同的面部表情?我问的原因是您可以(从编译器向导中借用一个术语)展开循环。而不是

    <ui:repeat value="#{panels}" var="panel">
      <ui:include src="#{panel.facelet}">
    </ui:repeat>
    

    你可以做到

    <custom:panelOneFacelet rendered="#{hasPanel1}" />
    <custom:panelTwoFacelet rendered="#{hasPanel2}" />
    <!-- etc... -->
    

    在你的脸上,你会有这样的东西:

    <c:if test="#rendered" >
        <!-- EVERYTHING IN THE FACELET HERE!!!-->
    </c:if>
    

    这种类型的 低技术 对于一个小的控制集来说,这种方法是很好的,但是如果你有一个非常大和变化的facelet集,这可能不起作用。

    我可以问一下为什么,B/C有时会理解高层,所以古鲁可能会为实现同一个目标提出更简单的想法。

    推荐文章