在JSF中处理复杂的Bean树

在JSF中处理复杂的Bean树,jsf,javabeans,Jsf,Javabeans,让我们看看这个bean结构,例如: public class Abean { private Bbean b; } public class Bbean { private ArrayList<Cbean> c; } public class Cbean { private ArrayList<Dbean> d; } public class Dbean { .... } 公共类Abean{ 私人Bbean b; } 公共课{ 私人Arr

让我们看看这个bean结构,例如:

public class Abean {
   private Bbean b;
}

public class Bbean {
   private ArrayList<Cbean> c;
}

public class Cbean {
   private ArrayList<Dbean> d;
}

public class Dbean {
    ....
}
公共类Abean{
私人Bbean b;
}
公共课{
私人ArrayList c;
}
公共类Cbean{
私人ArrayList d;
}
公共类Dbean{
....
}
所以基本上,Abean包含了一切。现在,我想为所有这些bean创建JSP,例如,用户可以知道他/她在
Bbean
中需要多少
Cbean
。所以我的问题是,我想为所有“子”实例自动显示一个表单,例如:在d.jsp上,我想为
Cbeans
中的每个
Dbean
显示一个表单

我尝试嵌入
-s,但没有成功。任何帮助或想法都将不胜感激。我希望我的解释清楚

提前感谢,,
Daniel

我不确定这是否回答了您的问题,但例如,在您的CBean中,如果您有列表“d”的getter,您可以使用JSTL在您的CBean中迭代DBean

<c:forEach items="#{myCBean.d}" var="myDBean">
    <h:form>
        <!-- example form content -->
        <h:outputText value="#{myDBean.someText}"/>
        <h:inputText value="#{myDBean.exampleInput}"/>
        <h:commandButton value="#{myDBean.anAction}"/>
    </h:form>
</c:forEach>

我假设既然您使用的是JSP,那么您就没有使用Facelets

如果是,则可以利用并手动构建一个包含嵌套表的表

例如



或者,Richfaces有一个a4j:repeat,它做同样的事情,毫无疑问可以与JSP一起使用。此外,Richfaces还有一个rich:subTable,可用于嵌套表。

嵌套数据表通常不是一个好主意。对于如此深度的数据结构,您可能会在子控件上进行O(n^4)迭代,这可能会对性能产生影响。标准的dataTable控件非常原始。更好的方法是使用某种形式的设计或编写自定义树控件。由于编写自定义控件需要详细了解JSF体系结构,因此您可能首先要查看第三方JSF库,看看是否能找到一个适合您需要的库。

我认为这是行不通的。JSTL标记将不遵守JSF生命周期。即使绘制正确,也会在呈现时产生重复的ID/输入名称,并在表单提交的应用请求值阶段产生奇怪的结果。它似乎在facelets环境中工作,但在JSP中它会引起问题。谢谢你指出这一点。因为后来我发现我在我的项目中需要这个解决方案,所以我把它作为正确的答案。谢谢你的其他答案!
<table> 
<ui:repeat value="#{myCBEan.d}" var="myDBean">
   <tr>
      <td><h:outputText value="#{myDBean.someText}"/></td>
   </tr>
</ui:repeat>
</table>