7
votes

Objets par défaut dans Spring 3 Session de la MVCTtributes lorsque la session a expiré

Je pense que je suis confondu un peu de la session Annotation au printemps MVC.

J'ai un code comme celui-ci (exemple de formulaire de formulaire de 2 étapes, STEP 1 Données utilisateur, Adresse étape 2) P>

@SessionAttributes({"user", "address"})
public class UserFormController {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView show( ModelAndView mv ){
        mv.addObject( new User() );
        mv.addObject( new Address() );
        mv.setViewName("user_add_page");
        return mv;
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm( User user, BindingResult result ){
        new UserValidator().validate(user, result);
        if( result.hasErrors() ){
            return "user_add_page";
        }else{
            return "redirect:/user_form/user_add_address";
        }

// .........
}


0 commentaires

3 Réponses :


0
votes

Selon le Manuel de référence Spring 3.0 , il semble que @SessionAttributes est destiné à être utilisé sur un type que vous souhaitez enregistrer de manière transparente dans la session, telle qu'une" commande "Ou un objet de soutien de la forme. Je ne pense pas que vous voudriez stocker un contrôleur en session.


2 commentaires

HYMMM ... Non, je ne voulais pas stocker contrôleur en session. Mon problème est que lorsque votre session expire votre utilisateur et vos objets d'adresse (les haricots de la tenue de données régulières) sont nuls. Je me suis arrêté avec @ExceptionHandler (httpspessiequireRegeException.class) Model PublictandView HeathException () {Modelandview mv = New ModelandView ("Redirection: / user_form"); mv.addObject (nouvel utilisateur ()); mv.addObject (nouvelle adresse ()); retour mv; } Mais ce n'est pas exactement ce que j'avais à l'esprit, j'espérais une solution plus propre


@sessessattributes est destiné à configurer quels objets que vous souhaitez stocker dans la session. Cela n'indique pas que le contrôleur est lié à la session (pour qu'il existe un @scope annotation).



5
votes

1.Je créer des objets vides s'il manque dans la session et accepter Soumettre

Utiliser @modelattribute ("utilisateur") méthode annotée pour fournir la valeur par défaut

2.Je retour sur le formulaire utilisateur avec un message

Utiliser @ExceptionHandler (httpessespaceRequiredException.class) - méthode annotée


1 commentaires

À côté de cet ajout @modelattribute à l'attribut dans la méthode processus .