JSF递归复合组件

Rah*_*ain 5 recursion composite-component jsf-2

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

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

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

我尝试使用包含面板中的呈现属性,基于列表是否为空但不起作用.我试图在c:中包含对复合组件(来自复合组件内)的调用,但它不起作用.

我总是得到一个StackOverflowError.

有关如何构建递归复合组件的任何帮助都会有所帮助.谢谢你的时间!

Arj*_*jms 7

我总是得到一个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>
Run Code Online (Sandbox Code Playgroud)

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

然后,基于父Java的组件在Java代码中启动实际递归,并委托其子代进行呈现.

希望这可以让你前进.