2009-06-15 28 views
1

所以我试图在我的spring webflow应用程序的视图中循环显示List<MyClass>。但是,我得到的错误必须评估为集合,映射,数组或null。c:foreach使用列表:必须评估为集合,地图,数组或空值

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

回答

2

我认为你必须从你正在创建

范围调用尝试

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

而且,为什么是你最后的名单?

+1

final只意味着您不能将新列表分配给列表(例如orderedStuff)引用。这很好。 – 2009-06-15 20:52:40

0

我想<c:forEach...需要这些类型之一。您是否尝试过将其转换为一个数组,e.g:

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

我还没有在Java中有一段工作,原谅我,如果这是路要走。

+0

是不是ArrayList /列出一个集合?这让我感到困惑。 – 2009-06-15 20:10:20

相关问题