Spring MVC 3.0: Comment puis-je lier à un objet persistant
Je travaille avec Spring MVC et j'aimerais qu'il lier un objet persistant de la base de données, mais je ne peux pas comprendre comment je peux mettre mon code pour faire un appel à la DB avant de liaison. Par exemple, je suis en train de mettre à jour un "BenefitType" objet de la base de données, cependant, je tiens à obtenir l'objet dela base de données, créez pas de nouvelle, donc je n'ai pas à mettre à jour tous les champs.
@RequestMapping("/save")
public String save(@ModelAttribute("item") BenefitType benefitType, BindingResult result)
{
...check for errors
...save, etc.
}
OriginalL'auteur Sanjay Ginde | 2010-09-08
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs options:
Dans le plus simple des cas, lorsque votre objet n'a qu'propriétés simples que vous pouvez lier toutes ses propriétés dans le champs de formulaire (
hidden
si nécessaire), et d'un objet lié après la soumission. Propriétés complexes peuvent également être lié aux champs de formulaire à l'aide dePropertyEditor
s.Vous pouvez aussi utiliser de session pour stocker vos objets entre
GET
etPOST
demandes. Le printemps 3 faciliates cette approche avec@SessionAttributes
annotation (à partir de la Petclinic échantillon):Toutefois, cette approche peut entraîner des problèmes si plusieurs instances de la forme sont ouverts simultanément dans la même session.
Donc le plus fiable pour les cas complexes est de créer un objet séparé pour stocker les champs de formulaire et de fusionner les changements de cet objet en objet persistant manuellement.
OriginalL'auteur axtavt
Alors j'ai fini par résoudre ce annoter une méthode avec un @ModelAttribute du même nom dans la classe. Printemps construit le premier modèle avant l'exécution de la demande cartographie:
OriginalL'auteur Sanjay Ginde
Alors qu'il est possible que votre modèle de domaine est tellement simple que vous pouvez lier des objets de l'INTERFACE utilisateur directement aux données des objets de modèle, il est plus probable que cela n'est pas, dans ce cas, je vous recommande fortement de vous concevoir une classe spécifiquement pour le formulaire de liaison, puis traduire entre l'it et du domaine des objets dans votre contrôleur.
OriginalL'auteur earldouglas
Je suis un peu confus. Je pense que vous êtes en train de parler d'un workflow de mise à jour?
Vous avez besoin de deux @RequestMappings, l'un pour GET et POST:
puis sur le POSTE de réellement mettre à jour le champ.
En vous exemple ci-dessus, votre @ModelAttribute devrait déjà être rempli avec une méthode comme la méthode ci-dessus, et les propriétés d'être lié en utilisant quelque chose comme JSTL ou au Printemps tabglibs en conjonction avec la forme de la sauvegarde de l'objet.
Vous pouvez également regarder InitBinder selon votre cas d'utilisation.
OriginalL'auteur Droo