循环与小面孔循环

时间:2011-12-28 11:41:03

标签: jsf java-ee facelets

我正在使用jsf2facelets开发应用程序。在我的一个视图中,我尝试显示数据库中的数据,并使用两个嵌套循环。第二个循环使用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>

第一个循环有效,但不是两个。

1 个答案:

答案 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也不是。此外,您似乎没有明显的原因混合使用延迟语句和立即语法(#{}${})。