我正在使用Spring 3.1。

我试图在JSP的Spring Form中显示对象的ArrayList。最终,我需要为每个对象都提供一个复选框,以便用户可以选择一行,然后按下某个后端操作的按钮。但是我无法使用Spring表单来显示数据。我不断收到异常:

org.springframework.beans.NotReadablePropertyException: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";
   }
}


具体来说,我想我的问题是commandName,forEach循环中的变量和Controller中的数据如何一起工作?有人可以使用上面的代码向我展示吗?

最佳答案

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>

10-07 13:23
查看更多