我正在使用jsf2
和facelets
开发应用程序。在我的一个视图中,我尝试显示数据库中的数据,并使用两个嵌套循环。第二个循环使用var,它是为第一个循环声明的var的属性。
但它不起作用。
以下是我的代码的相关部分:
<ui:repeat value="#{MyBean.Vect}" var="item">
<h:outputText value="${item.attr}" /> <br />
<ui:repeat value="#{item.nestedtVect}" var="product" >
<h:outputText value="${product.name}" /> <br />
</ui:repeat>
</ui:repeat>
第一个循环有效,但不是两个。
答案 0 :(得分:4)
你确定item.nestedtVect
不是空的并且实际上有项吗?你的Facelet乍一看似乎是正确的。
E.g。考虑这个最小的例子:
支持bean:
@ManagedBean
public class NestedLoopBacking {
String[][] items = { {"A", "B"}, {"1", "2", "3"} };
public String[][] getItems() {
return items;
}
}
的facelet:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<ui:repeat value="#{nestedLoopBacking.items}" var="item">
<ui:repeat value="#{item}" var="content">
<h:outputText value="${content}" />
<br />
</ui:repeat>
</ui:repeat>
</h:body>
</html>
这个Just Works™。您可能希望进行显式测试以查看嵌套集合是否为空:
<h:outputText value="Collection empty" rendered="#{empty item.nestedtVect}"/>
<h:outputText value="Collection not empty" rendered="#{!empty item.nestedtVect}"/>
P.S。
与此问题无关,但您可能希望查看自己的命名。 MyBean.Vect
不是一个非常好的名字,attr
中的item.attr
也不是。此外,您似乎没有明显的原因混合使用延迟语句和立即语法(#{}
和${}
)。