我正在使用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中的数据如何一起工作?有人可以使用上面的代码向我展示吗?
最佳答案
datafeeds
是ArrayList
。您使用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>