c:foreach 使用 List:必须求值为 Collection、Map、Array 或 null

发布于 2024-07-24 17:52:33 字数 1827 浏览 8 评论 0 原文

因此,我尝试循环 List 以在我的 Spring Webflow 应用程序的视图中显示。 但是我收到错误必须计算为集合、映射、数组或空。

    <c:forEach items="#{orderedStuff}" var="a">
    #{a.PrettyName}test
    </c:forEach>

我也尝试过用$代替#。

这是我的 xml 流定义。

<view-state id="bookToc">
    <on-render>
        <evaluate expression="stuffService.getOrderedStuff(stuff)" result="viewScope.orderedStuff"
            result-type="dataModel" />
    </on-render>
</view-state>

以及返回部分列表的函数。

public List<Stuff> getStuff(Stuff stuff) {
    final List<Stuff> orderedStuff= new ArrayList<Stuff>();

    final List<Stuff> sections = stuff.getStuff();
    PropertyComparator.sort(sections, new MutableSortDefinition("sortOrder", true, true));

    for (Section stuff : stuffs) {
        orderedStuff.add(stuff);
        this.addSubsectionsToOrderedStuff(stuff, orderedStuff);
    }

    return orderedStuff;
}

问题是,这段代码确实有效

<h:dataTable id="stuffList" value="#{orderedStuff}" var="s"
            rendered="#{not empty orderedStuff}">
            <h:column>
                <f:facet name="header">
                    Section Title
                </f:facet>
                #{s.prettyName}
                <h:dataTable value="#{s.chapters}" var="c" rendered="#{not empty s.chapters}">
                    <h:column>
                        <f:facet name="header">
                        Chapter Title
                        </f:facet>
                    #{c.title}
                    </h:column>
                </h:dataTable>              
            </h:column>
        </h:dataTable>  

So I'm trying to loop over a List<MyClass> for display in the view of my spring webflow application. However I get the error Must evaluate to a Collection, Map, Array, or null.

    <c:forEach items="#{orderedStuff}" var="a">
    #{a.PrettyName}test
    </c:forEach>

I've also tried $ instead of #.

Here is my xml flow definition.

<view-state id="bookToc">
    <on-render>
        <evaluate expression="stuffService.getOrderedStuff(stuff)" result="viewScope.orderedStuff"
            result-type="dataModel" />
    </on-render>
</view-state>

And the function that returns the list of sections.

public List<Stuff> getStuff(Stuff stuff) {
    final List<Stuff> orderedStuff= new ArrayList<Stuff>();

    final List<Stuff> sections = stuff.getStuff();
    PropertyComparator.sort(sections, new MutableSortDefinition("sortOrder", true, true));

    for (Section stuff : stuffs) {
        orderedStuff.add(stuff);
        this.addSubsectionsToOrderedStuff(stuff, orderedStuff);
    }

    return orderedStuff;
}

The thing about it is, this code DOES WORK

<h:dataTable id="stuffList" value="#{orderedStuff}" var="s"
            rendered="#{not empty orderedStuff}">
            <h:column>
                <f:facet name="header">
                    Section Title
                </f:facet>
                #{s.prettyName}
                <h:dataTable value="#{s.chapters}" var="c" rendered="#{not empty s.chapters}">
                    <h:column>
                        <f:facet name="header">
                        Chapter Title
                        </f:facet>
                    #{c.title}
                    </h:column>
                </h:dataTable>              
            </h:column>
        </h:dataTable>  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

许一世地老天荒 2024-07-31 17:52:33

我认为您必须从您正在创建的范围内进行调用

Try

 <c:forEach items="#{bookTok.orderedStuff}" var="a">

And,为什么您的列表是最终的?

I think you would have to call from the scope that you're creating

Try

 <c:forEach items="#{bookTok.orderedStuff}" var="a">

And, why are your lists final?

浪漫之都 2024-07-31 17:52:33

我猜 需要其中一种类型。 您是否尝试过将其转换为数组,例如:

// Create an array containing the elements in a list
Stuff[] array = (Stuff[])orderedStuff.toArray(new Stuff[orderedStuff.size()]);

我已经有一段时间没有使用 Java 了,如果这还不够,请原谅我。

I guess <c:forEach... needs one of those types. Have you tried converting it to an array, e.g:

// Create an array containing the elements in a list
Stuff[] array = (Stuff[])orderedStuff.toArray(new Stuff[orderedStuff.size()]);

I haven't worked in Java for a while, forgive me if this is way off.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文