【问题标题】:Loop in loop with facelets使用 facelets 循环循环
【发布时间】:2011-12-28 11:41:02
【问题描述】:

我正在使用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>

第一个循环有效,但不能同时有效。

【问题讨论】:

  • nestedtVect 不是错字吗?你发布了你的确切代码吗?

标签: jsf jakarta-ee facelets


【解决方案1】:

您确定item.nestedtVect 不为空并且实际上有项目吗?乍一看,您的 Facelet 似乎是正确的。

例如考虑这个最小的例子:

支持 bean:

@ManagedBean
public class NestedLoopBacking {

    String[][] items = { {"A", "B"}, {"1", "2", "3"} };

    public String[][] getItems() {
        return items;
    }
}

小脸:

<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>

This Just Works™。您可能需要进行显式测试以查看您的嵌套集合是否为空:

<h:outputText value="Collection empty" rendered="#{empty item.nestedtVect}"/>
<h:outputText value="Collection not empty" rendered="#{!empty item.nestedtVect}"/>

附言

与问题无关,但您可能想查看您的命名。 MyBean.Vect 不是一个好名字,attr 也不是 item.attr。此外,您似乎无缘无故地混合了延迟语法和立即语法(#{}${})。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多