本论坛的许多帖子都提到了类似的问题;但没有人有特定的解决方案,我感谢你帮助我:
我正在使用spring开发一个Web应用程序, 我不知道我应该在表单的路径中放置什么:checkbox标签里面的c:foreach one,这是我的代码:
<c:forEach items="${persons}" var="person" varStatus="i">
<tr>
<td><c:out value="${person.firstName}" /></td>
<td><c:out value="${person.lastName}" /></td>
<td><form:checkbox path="person.rights" value="Download"/>Download </td>
<td><form:checkbox path="person.rights" value="Delete"/>Delete </td>
</tr>
</c:forEach>
'rights
'是弹簧文档中定义的字符串列表,它有一个getter和一个像其他属性一样的setter,我的复选框在c:foreach
标记之外工作,但是当包括将它们放入此标记中会生成此异常:
org.springframework.beans.NotReadablePropertyException: Invalid property 'person' of bean class [java.util.ArrayList]: Bean property 'person' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
你对这个问题有什么看法吗?
答案 0 :(得分:3)
这个问题在大多数地方都很奇怪。以下是我在下面发布的链接的摘录。要点是我们需要一个静态占位符,它映射到类型而不是bean的值。因此$ {}内的任何内容都无法解决。为此,在使用带有s [ring form tld的JSTL循环运算符<c:forEach>
的特定情况下,我们应该使用{{1}的varStatus
属性来引用每次迭代中的类型信息。运算符,就像数组的索引一样,因此在集合变量上使用<c:forEach>
引用可迭代集合的内部属性,该变量可通过备份表单的最外层bean访问。
例如:
.
其中:
<c:forEach items="${teamslist_session.teams}" var="team" varStatus="teamsLoop">
<form:input path="teams[${teamsLoop.index}].name"/>
</c:forEach>
是备份teamList_session
是bean的集合,我们需要在teams
属性中设置属性path
是对var
集合teams
是迭代索引,在下面的行中用来引用说teamsLoop
元素的bean的属性i
有关更多信息,请参阅以下链接: Forum Discussion - See the last post The link provided for reference in link 1
答案 1 :(得分:1)
此Link对您有用。 感谢