让我们来看看这个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
包含了一切。现在我想为所有这些bean创建JSP,例如,用户可以在Cbean
中告诉他/她想要多少Bbean
。所以我的问题是我想自动显示所有“子”实例的表单,例如:在d.jsp上我想为Dbean
内的每个Cbeans
显示一个表单。
我试图嵌入<h:dataTable>
- s,但没有成功。任何帮助或想法将不胜感激。我希望我的解释清楚。
提前致谢, 丹尼尔
答案 0 :(得分:1)
我认为既然你正在使用JSP而你没有使用Facelets?
如果你是,那么你可以利用它并手动建立一个带有嵌套表的表。
例如
<table>
<ui:repeat value="#{myCBEan.d}" var="myDBean">
<tr>
<td><h:outputText value="#{myDBean.someText}"/></td>
</tr>
</ui:repeat>
</table>
另外,Richfaces有一个 a4j:repeat ,它可以做同样的事情,毫无疑问可以用于JSP。此外,Richfaces还有一个 rich:subTable ,可用于嵌套表格。
答案 1 :(得分:1)
嵌套dataTable通常不是一个好主意。使用这种深度数据结构,您最终可能会对子控件进行O(n ^ 4)次迭代,这可能会对性能产生影响。标准的dataTable控件很原始。更好的方法是使用某种形式的master/detail设计或编写自定义树控件。由于编写自定义控件需要详细了解JSF体系结构,因此您可能首先要查看第三方JSF库,看看是否能找到适合您需求的库。
答案 2 :(得分:0)
我不确定这会解决您的问题,但是例如在您的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>