2012-10-15 92 views
1

我正在使用Spring 3.1。以彈簧形式顯示ArrayList

我想在JSP中的彈簧形式顯示對象的ArrayList。最後,我需要爲每個對象設置一個複選框,以便用戶可以選擇一行,然後按下按鈕以執行一些後端操作。但我無法使用Spring表單顯示數據。我一直收到一個異常:

org.springframework.beans.NotReadablePropertyExcep tion:bean類[java.util.ArrayList]的無效屬性'datafeed [0]:Bean屬性'datafeeds [0]'不可讀或有一個無效的getter方法:......「

這裏是縮小代碼:

<form:form method="post" commandName="datafeeds"> 
    <table> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>State</th> 
     </tr> 
    <tbody> 
     <c:forEach items="${datafeeds}" var="datafeed" varStatus="vs"> 
      <tr> 
       <td><form:label path="datafeeds[${vs.index}].name/></td> 
       <td><form:label path="datafeeds[${vs.index}].state/></td> 
      </tr> 
     </c:forEach> 
    </tbody> 
    </table> 
</form> 

則控制器:

@Controller 
public class DataFeedController 
{ 
    @Autowired 
    SomeService service; 

    @RequestMapping(value="/datafeed") 
    public String showDataFeed(Model m) { 
     List<DataFeed> datafeeds = service.list(); 
     m.addAttribute("datafeeds", datafeeds); 
     return "datafeed"; 
    } 
} 

具體來說,我想我的問題,我s如何將commandName,forEach循環中的變量和Controller中的數據一起工作?任何人都可以使用上面的代碼顯示我嗎?

回答

3

datafeedsArrayList。您使用datafeeds.get(index)訪問元素,而不是[index]。使用方括號只適用於數組。這樣做:

<c:forEach items="${datafeeds}" var="datafeed" varStatus="vs"> 
    <tr> 
     <td><form:label path="${datafeed.name}"/></td> 
     <td><form:label path="${datafeed.state}"/></td> 
    </tr> 
</c:forEach> 
+0

得到了進一步,但仍然得到一個例外。這一次,我碰到一個「bean類[java.util.ArrayList中]的無效屬性‘MYNAME’:Bean屬性‘MYNAME’不可讀.....」在哪裏「MYNAME」是$ {} datafeed.name實際值來自DB。 – wxkevin

+0

爲了最終在這裏的其他人的利益,這個答案是錯誤的。表單標籤不能訪問datafeed bean。 – TedTrippin

0

我能夠使用this教程工作。基本上,你必須做出一個窗體類,其中包含您的數據Feed的列表:

public class DataFeedForm { 
    private List<DataFeed> dataFeeds; 

    public List<DataFeed> getDataFeeds() { 
     return dataFeeds; 
    } 

    public void setDataFeeds(List<DataFeed> dataFeeds) { 
     this.dataFeeds = dataFeeds; 
    } 
} 

而且這種形式的對象(充滿數據傳送專線)傳遞給您的觀點:

@Controller 
public class DataFeedController 
{ 
    @Autowired 
    SomeService service; 

    @RequestMapping(value="/datafeed") 
    public String showDataFeed(Model m) { 
     List<DataFeed> datafeeds = service.list(); 
     DataFeedForm form = new DataFeedForm(); 
     form.setDataFeeds(datafeeds); 
     m.addAttribute("datafeedsForm", form); 
     return "datafeed"; 
    } 
} 

而且在目前的表單數據像這樣的看法:

<form:form method="post" modelAttribute="datafeedsForm" commandName="datafeeds"> 
    <table> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>State</th> 
     </tr> 
    <tbody> 
     <c:forEach items="${datafeedsForm.datafeeds}" var="datafeed" varStatus="vs"> 
      <tr> 
       <td><form:label path="datafeeds[${vs.index}].name"/></td> 
       <td><form:label path="datafeeds[${vs.index}].state"/></td> 
      </tr> 
     </c:forEach> 
    </tbody> 
    </table> 
</form>