如何在默认情况下选中弹簧复选框?

时间:2012-03-16 14:19:30

标签: java spring spring-mvc

我正在使用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();
    }
}

5 个答案:

答案 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:checkboxesform: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>