Sans y penser trop, je fais quelque chose comme ce qui suit:printemps - la meilleure façon de traiter la liaison à une liste de haricots dans un SimpleFormController
1) la construction d'une liste d'objets SomeBean sur la base les résultats d'une base de données appellent
2) mettre cette liste dans mon objet de commande
3) la construction d'un formulaire basé sur cet objet de commande où les utilisateurs peuvent modifier les attributs des SomeBeans
4) extraction des données sur de la post-soumission objet de commande et l'écriture des données mises à jour ma base de données
Mon code ressemble à ceci:
public class UpdateThingsinListController extends SimpleFormController {
protected Object formBackingObject(final HttpServletRequest request)
throws Exception {
List<SomeBean> beans = database.getBeans();
Command comamnd = new UpdateThingsCommand()
command.setList(beans);
return command;
}
protected ModelAndView onSubmit(final HttpServletRequest request,
final HttpServletResponse response, final Object commandArg,
final BindException errors) throws Exception {
database.setBeans(commandArg.getList());
}
}
mon jsp ressemble somthething comme:
<form:form>
<c:forEach var="bean" items="${beans}" varStatus="status">
<form:checkbox path="beans[${status.index}].someBooleanProperty" />${bean.name} <br>
</c:forEach>
</form:form>
Le code fonctionne très bien, mais il est juste aube sur moi que ma liste de «haricots» est créée deux fois (la forme de session doit être fausse dans mon cas) - une fois en affichant le formulaire, une fois en liant. Si quelque chose change sur la deuxième création (un haricot est manquant, les résultats sont dans un ordre différent), ma liaison sera foiré, et je serai viré. Je commence à penser que tout schéma de fusion dans lequel un objet de commande doit être fusionné avec une soumission de formulaire est très risqué. Donc, ma question est: comment les gens s'assurent-ils que les soumissions de formulaire sont liées aux listes correctement? Existe-t-il un autre moyen de le faire en plus de l'index de la liste? ID d'objet peut-être?
grâce,
-Morgan
Je pense maintenant qu'au lieu d'une liste, je devrais peut-être utiliser une carte, donc ma balise checkbox ressemblerait à: –
morgancodes