我正在使用Spring 3.1.0.RELEASE。我在命令对象中有这个字段......
public Set<EventFeed> getUserEventFeeds() {
return this.userEventFeeds;
}
在我的Spring JSP页面上,我想显示所有可能的事件源的复选框列表,然后检查复选框,如果用户在其集合中有一个。我希望在每个复选框周围都有一些特殊的HTML格式,所以我正在尝试......
<form:form method="Post" action="eventfeeds.jsp" commandName="user">
...
<c:forEach var="eventFeed" items="${eventFeeds}">
<tr>
<td><form:checkbox path="userEventFeeds" value="${eventFeed}"/></td>
<td>${eventFeed.title}</td>
</tr>
</c:forEach>
...
但是,如果项目在集合中,则默认情况下不会检查这些项目。我该怎么做呢?这是我在控制器类中使用的活页夹......
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(EventFeed.class, new EventFeedEditor());
}
private class EventFeedEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue(eventFeedsDao.findById(Integer.valueOf(text)));
}
@Override
public String getAsText() {
return ((EventFeed) getValue()).getId().toString();
}
}
答案 0 :(得分:7)
@Dave,有一种叫做form:checkBoxes。你可以尝试一下。
<form:checkboxes path="userEventFeeds" items="${eventFeeds}" itemLabel="id" itemValue="value"/>
我的假设是你应该在EventFeed类中定义“id”和“value”。
我刚试过一个String [] availableList和String [] selectedList。它就像魅力一样。你也可以尝试一下。
答案 1 :(得分:7)
有趣的是,这有效:
<form:checkbox path="services" value="${type}" checked="checked"/>
答案 2 :(得分:6)
您可以通过在类
中放置选定的默认属性true来执行此操作class User {
boolean userEventFeeds = true;
}
答案 3 :(得分:0)
我已尝试使用相同的数据form:checkboxes
和form:checkbox
,第一个工作,第二个没有。 (你有相同的Spring版本)
看起来有一个bug,尽管他们声称,似乎还在那里。
答案 4 :(得分:0)
对于我的用例(对列表中与填充对象无关的内容做出反应),此代码有效:
(请注意,这是最后一种代码,其他解决方案最有可能更适合。)
<%@ taglib prefix="jstl" uri="http://java.sun.com/jsp/jstl/core" %>
<jstl:forEach var="listObject" items="${someList}">
<jstl:if test="${listObject.active}">
<form:checkbox path="active" checked="checked"/>
</jstl:if>
<jstl:if test="${!listObject.active}">
<form:checkbox path="active"/>
</jstl:if>
</jstl:forEach>