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

Dav*_*ave 9 java spring spring-mvc

我正在使用Spring 3.1.0.RELEASE.我的命令对象中有这个字段...

public Set<EventFeed> getUserEventFeeds() {
    return this.userEventFeeds;
}
Run Code Online (Sandbox Code Playgroud)

在我的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>
    ...
Run Code Online (Sandbox Code Playgroud)

但是,如果一个项目在集合中,则默认情况下不会检查这些项目.我该怎么做呢?这是我在控制器类中使用的活页夹...

@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();
    }
}
Run Code Online (Sandbox Code Playgroud)

rad*_*ish 7

@Dave,有一种叫做form:checkBoxes.你可以尝试一下.

<form:checkboxes path="userEventFeeds" items="${eventFeeds}" itemLabel="id" itemValue="value"/>
Run Code Online (Sandbox Code Playgroud)

我的假设是你应该在EventFeed类中定义"id"和"value".

我只是通过使用String [] availableList和String [] selectedList来尝试这个.它就像魅力一样.你也可以尝试一下.


kea*_*gik 7

有趣的是,这有效:

<form:checkbox path="services" value="${type}" checked="checked"/>
Run Code Online (Sandbox Code Playgroud)


Jho*_*han 6

您可以通过在类中放置选定的默认属性true来完成此操作

class User {
   boolean userEventFeeds = true;

}
Run Code Online (Sandbox Code Playgroud)