JSP表单:复选框变为c:foreach

时间:2012-07-13 21:46:47

标签: java spring jsp java-ee taglib

本论坛的许多帖子都提到了类似的问题;但没有人有特定的解决方案,我感谢你帮助我:

我正在使用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?

你对这个问题有什么看法吗?

2 个答案:

答案 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> 是备份
  • 形式的bean
  • 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对您有用。 感谢