【问题标题】:JSF Recursive Composite ComponentJSF 递归复合组件
【发布时间】:2011-10-21 16:16:30
【问题描述】:

我有一个递归对象bean结构,就像

Master DTO 列表 -> 值 -> Master DTO 列表

我正在尝试使用一个输入文本和一个将值绑定到值字段的按钮创建一个递归复合组件。我正在调用相同的组件来构建子类型,但它给了我堆栈溢出错误。

我根据列表是否为空尝试在包含面板中使用渲染属性,但它不起作用。我试图在 c:if 中包装对复合组件的调用(从复合组件内),但它不起作用。

我总是收到 StackOverflowError。

任何有关如何构建递归复合组件的帮助都会有所帮助。感谢您的宝贵时间!

【问题讨论】:

    标签: recursion jsf-2 composite-component


    【解决方案1】:

    我总是收到 StackOverflowError

    那么您现在肯定来对了网站;)

    撇开玩笑不谈,遗憾的是复合组件不支持递归。在我的工作中,我们最近处理了一个具有类似要求的组件,我们解决它的方法是用几个基于 Java 的组件替换直接递归,这些组件可以放置在复合组件上以声明递归结构。

    我无法提供实际代码,因为它受我公司的版权保护,但以下是如何使用它的示例:

    <jcf:recursion value="#{foo.someData}" var="item">
    
        <jcf:recursionNode level="0">
            <jcf:recursionNodeItem rendered="#{foo.someCondition}">
                <!-- Some markup possibly referencing item -->
                    <jcf:insertRecursionNodeChildren />
                <!-- Some more markup  -->
            </jcf:recursionNodeItem>
        </jcf:recursionNode>
    
        <jcf:recursionNode>
            <!-- Some markup  -->
            <jcf:recursionNodeItem rendered="#{foo.someOtherCondition}">
                <!-- Some more markup  -->
                    <jcf:insertRecursionNodeChildren />
                <!-- Some more markup  --> 
            </jcf:recursionNodeItem>
            <!-- Some more markup  -->
        </jcf:recursionNode>
    
    </jcf:recursion>
    

    这个想法是,对于递归的每次迭代,可以定义明确的标记和指令。示例中显示的是第一级的说明。如果未定义级别,则说明适用于递归中尚未定义显式级别的每个级别。 Nodes 表示新级别,而NodeItems 表示给定级别上的所有项目。

    然后,基于 Java 的父组件在 Java 代码中开始实际的递归,并委托给它的子组件进行渲染。

    希望这能让你继续前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 2011-06-02
      • 2011-06-27
      • 2013-03-23
      • 2013-04-22
      • 2011-06-04
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多