2012-03-16 109 views
7

我使用Spring 3.1.0.RELEASE。我有这个场在我的命令对象......如何使弹簧复选框默认选中?

public Set<EventFeed> getUserEventFeeds() { 
    return this.userEventFeeds; 
} 

在我的春节,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(); 
    } 
} 

回答

7

@Dave,有一种叫form:checkBoxes的东西。你可以试试这个。

<form:checkboxes path="userEventFeeds" items="${eventFeeds}" itemLabel="id" itemValue="value"/> 

我的假设是你应该在EventFeed类中定义“id”和“value”。

我刚刚尝试了一个String [] availableList和String [] selectedList。它的作用像魅力。你也可以尝试一下。

+0

按我描述的问题,我希望把更多的HTML围绕每个复选框。那么我还可以使用form:checkboxes来取消我想要的HTML(在问题中列出)?到目前为止,我还没有找到办法做到这一点。 – Dave 2012-03-19 14:27:07

+0

你的意思是你希望围绕该复选框的表格在一列中带有复选框标签,并在相邻列中使用复选框? – raddykrish 2012-03-19 15:10:39

+0

有一个名为“element”的属性,格式为:checkboxes标签,它们的文档中写明:“指定用于将每个'input'标签封装到'checkbox'类型的HTML元素,默认为'span'。您可以在此链接http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.checkboxes中查看文档。 – raddykrish 2012-03-19 18:25:33

5

您可以通过将选择默认属性真正在你的类

class User { 
    boolean userEventFeeds = true; 

} 
0

为此,我都试过form:checkboxesform:checkbox使用相同的数据和第一部作品,第二个没有。 (你有相同的春天版本)

它看起来像是有一个bug尽管他们声称,似乎仍然存在。

6

有趣的是这个工程:

<form:checkbox path="services" value="${type}" checked="checked"/> 
+0

最好的做法是设置Jhonathan建议的特定字​​段的默认值。如果出于任何原因,你不能这个解决方案确实有效。 – theblang 2014-02-20 22:33:47

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>