【问题标题】:c:foreach using List: Must evaluate to a Collection, Map, Array, or nullc:foreach 使用 List:必须计算为 Collection、Map、Array 或 null
【发布时间】:2010-11-03 03:07:01
【问题描述】:

所以我试图循环 List<MyClass> 以显示在我的 spring webflow 应用程序的视图中。但是我得到错误 Must evaluate to a Collection, Map, Array, or null。

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

【问题讨论】:

    标签: java spring jsp jstl spring-webflow


    【解决方案1】:

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

    试试

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

    而且,为什么你的列表是最终的?

    【讨论】:

    • final 只是意味着您不能将新列表分配给列表(例如orderedStuff)引用。在这里很好。
    【解决方案2】:

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

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

    我已经有一段时间没有在 Java 中工作了,如果这太离谱了,请原谅我。

    【讨论】:

    • ArrayList/List 不是一个集合吗?这让我很困惑。
    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2017-05-11
    相关资源
    最近更新 更多