在JSF中处理复杂的Bean树
让我们看看这个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
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>