2012-03-16 110 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>