Un caso d'uso abbastanza comune si verifica in presenza di un elenco di oggetti Java, da cui è possibile effettuare selezioni su un modulo Web: in genere si utilizza la chiave primaria del oggetto come valore in modo che il controllore possa eseguire una ricerca o semplicemente associare la chiave a qualsiasi oggetto creato/aggiornato.Spring MVC - Selezione oggetto a discesa - Nessun identificativo primario
Il mio problema è che l'elenco da cui scegliere non è persistente, gli oggetti con chiave, sono modelli di business da un servizio che non hanno un modo ragionevole per recuperarli in base ai dati contenuti. Di seguito è riportato un pò di codice psuedo in cui una lista di Foo viene data alla pagina, e possiamo facilmente comunicare al controller suInvia il nome di Foo, ma cosa succede se ci sono altri campi di Foo che devono essere inviati?
regolatore:
referenceData() {
...
List foos = fooService.getFoosForBar(bar)
return { 'foos', foos }
}
jsp:
<form>
...
<spring:bind path="formData.foo">
<select name="<c:out value="${status.expression}" />">
<c:forEach items="${foos}" var="foo">
<option value="<c:out value="${foo.name}"/>">
<c:out value="${foo.name}"/>
</option>
</c:forEach>
</select>
</spring:bind>
...
</form>
Alcune soluzioni esempio potrebbe essere quello di utilizzare i campi nascosti di presentare altre proprietà di Foo e tenerli in sincronia come la selezione è cambiato, ma preferisco non usare JavaScript in una situazione come questa in cui probabilmente aggiungerà confusione. Ci sono certamente altri modi per ottenere questo risultato.
La mia domanda è: esiste qualche pratica standard per realizzare questo? O dovrei inventarmi il mio modo di farlo? Preferirei non re-inventare le ruote, se possibile, e questo è così apparentemente comune che solo l'ala potrebbe non essere l'approccio migliore.
Ho usato questo approccio registrando un raccoglitore personalizzato nel controller per passare dalla stringa all'oggetto rappresentativo (che è il centralizzato codice che suggerisce dwb). – Nate