0

我们以这个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包含了一切。Cbean现在我想为所有这些 bean 制作 JSP,例如,用户可以告诉他/她想要多少个Bbean. 所以我的问题是我想自动为所有“子”实例显示一个表单,例如:在 d.jsp 上,我想DbeanCbeans.

我试图嵌入<h:dataTable>-s,但没有任何成功。任何帮助或想法将不胜感激。我希望我的解释很清楚。

在此先感谢,丹尼尔

4

3 回答 3

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可以用来嵌套表格。

于 2009-05-07T09:33:15.347 回答
1

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

于 2009-05-07T09:48:59.413 回答
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>
于 2009-05-07T08:36:03.393 回答