Conserve la valeur dans l'attribut de modèle pour le printemps mvc
Quand je suis à l'aide d'un contrôleur Spring MVC et j'ai envoyer un formulaire par la mise en valeur de la modelAttribute
je perdre du modèle de champs qui ne sont pas mappées dans la forme.
Dans cet exemple, parce que je n'ai pas la carte de l'âge et de l'adresse, ces champs sont perdues, et ils ont null
valeur. Je ne veux pas laisser à l'utilisateur de changer l'âge et l'adresse, c'est pourquoi ces champs ne sont pas dans la forme.
Méthode de contrôleur de poste de l'utilisateur de modifier la forme:
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String editionUser(Model model, @ModelAttribute("accountForm") User user,
BindingResult bresult,
RedirectAttributes redirectAttributes) {
//user.getAge() and user.getAddress are null
//Save the information...
}
Méthode du contrôleur pour obtenir la page modifier l'utilisateur:
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public String initEdit(Model model) {
//the user fields are all filled
User user = userService.getUserById(...);
model.addAttribute("accountForm", user);
return "edition";
}
class User {
Long id;
String email;
String age;
String address;
String nickname;
//...
}
édition.jsp
<form:form class="form" method="POST" action="edition" modelAttribute="accountForm">
<form:label path="email">email</form:label>
<form:input path="email" name='email'/>
<form:label path="nickname">nickname</form:label>
<form:input path="nickname" name='nickname'/>
<form:hidden path="id" />
<input name="submit" type="submit" value="valid" />
</form:form>
Que sont la meilleure solution pour ne pas perdre la valeur de ces champs ? (l'âge et l'adresse)
Utiliser le formulaire chemin caché pour chaque domaine ??
Magasin de l'utilisateur dans la session avant de rediriger vers la page d'édition et de définir de récupérer la session de l'utilisateur dans la méthode post contrôleur de changer uniquement les champs modifiés ?
Est-il un générique méthode?
source d'informationauteur julus
Vous devez vous connecter pour publier un commentaire.
J'irais à la session, pour une raison simple:
les champs de formulaire masqué peut être facilement manipulé côté client avant de soumettre le formulaire, donc ils ne répondent pas à vos exigences.
Noter que sans enregistrer les valeurs précédemment saisies quelque part, vous ne peuvent même pas détecter s'ils ont été altérés sur le côté client, de sorte que les champs cachés ne sont certainement pas une option.
Utiliser la session.
C'est un vieux post, mais peut-être que la réponse sera aider à Ressort débutants comme moi
Malheureusement, sauf si vous utilisez
@SessionAttributes({"attributeName"})
vous perdrez les autres attributs de l'objet.Ce post, il explique Spring MVC - passer des variables d'une page à l'autre
Voir ma réponse ici:
Est-il possible de mettre à jour uniquement un sous-ensemble des attributs d'une entité à l'aide de Spring MVC avec JPA?
Cela devrait faire le travail pour vous. Unfortulately il n'y a pas plus élégant de la méthode.
Sur une note de côté, il semble comme Spring WebFlow gère mettre à jour un modèle avec uniquement les champs de la poste. Probablement, il stocke le Modèle dans la session, et les mises à jour uniquement les valeurs contenues dans le POST.