2

这个论坛的很多帖子都提到了类似的问题;但是没有人有特定的解决方案,我感谢您在这方面帮助我:

我正在使用 spring 开发一个 web 应用程序,我不知道我应该在 c:foreach 内部的 form:checkbox 标记的路径中放什么,这是我的代码:

<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' 是在 spring 文档中定义的字符串列表,它像其他属性一样具有 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?

你知道问题是什么吗?

4

1 回答 1

3

这个问题在大多数地方都奇怪地没有记录。这是我在下面发布的链接的摘录。要点是我们需要一个静态占位符,它映射到类型而不是 bean 的值。所以 ${} 里面的任何东西都行不通。为此,在使用<c:forEach>带有 s[ring 形式 tld 的 JSTL 循环运算符的特定情况下,我们应该使用运算符的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是bean的集合,我们需要在属性中设置其path属性
  • var是对teams集合中每个成员的引用
  • teamsLoop是迭代索引,它在下面的行中用于引用say,ith元素的bean的属性称为name

更多信息请参考以下链接: 论坛讨论 - 见上一篇文章 链接1中提供的链接供参考

于 2013-04-07T19:54:11.317 回答