2012-03-16 13 views
7

Sto usando Spring 3.1.0.RELEASE. Ho questo campo nel mio oggetto comando ...Come rendere le caselle di controllo selezionate in modo predefinito?

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

Sulla mia pagina Spring JSP, voglio visualizzare un elenco casella di controllo di tutti i possibili eventi si nutre, e poi hanno controllato le caselle di controllo se l'utente ha uno in suo set . Voglio avere un po 'speciale formattazione HTML intorno ad ogni casella di controllo, quindi sto cercando ...

<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> 
    ... 

Tuttavia, gli elementi non sono sempre controllati per impostazione predefinita se uno è nel set. Come faccio a fare questo? Ecco il raccoglitore che sto utilizzando nella mia classe controller ...

@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(); 
    } 
} 

risposta

7

@Dave, c'è qualcosa chiamato form: checkBoxes. Puoi provare con quello.

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

La mia ipotesi qui è che dovresti avere "id" e "valore" definiti nella classe EventFeed.

Ho appena provato questo avendo una stringa [] availableList e String [] selectedList. Funziona come un fascino. Puoi provare anche tu.

+0

Per la mia descrizione nella domanda, voglio aggiungere ulteriore HTML attorno a ciascuna casella di controllo. Quindi posso ancora estrarre l'HTML che voglio (elencato nella domanda) usando il modulo: checkboxes? Finora non ho trovato un modo per farlo. – Dave

+0

Vuoi dire che vuoi che la tabella intorno a quella casella di controllo con l'etichetta casella di controllo in una colonna e la casella di controllo nella colonna adiacente? – raddykrish

+0

C'è un attributo chiamato "elemento" nel modulo: checkboxes tag, che con la loro documentazione dice "Specifica l'elemento HTML che è usato per racchiudere ogni tag 'input' con type 'checkbox." Predefinito a "span". " È possibile consultare la documentazione qui in questo link http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.checkboxes. – raddykrish

5

È possibile farlo mettendo proprietà predefinita selezionata vero nella tua classe

class User { 
    boolean userEventFeeds = true; 

} 
0

Ho provato sia form:checkboxes e form:checkbox con gli stessi dati e le prime opere, il secondo no. (La stessa versione di Spring che hai)

Sembra che ci fosse un bug che, nonostante la loro richiesta, sembra essere ancora lì.

6

È interessante notare che questo funziona:

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

È consigliabile impostare il valore predefinito del campo particolare come suggerito da Jhonathan. Se, per qualsiasi motivo, non è possibile, allora questa soluzione funziona. – theblang

0

Per il mio caso d'uso (reagendo su roba in un elenco che non ha nulla a che fare con l'oggetto che viene riempito), questo codice ha funzionato:

(Si prega di essere consapevole del fatto che questo è un tipo di codice di ultima istanza, altre soluzioni sono molto probabilmente più adatte.)

<%@ 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> 
Problemi correlati