Printemps RedirectAttributes: addAttribute() vs addFlashAttribute()
Ma compréhension à ce jour est sur notre contrôleur demande la méthode de mapping, nous pouvons spécifier RedirectAttributes paramètre et de le remplir avec des attributs pour quand la demande sera redirigé.
Exemple:
@RequestMapping(value="/hello", method=GET)
public String hello(RedirectAttributes redirAttr)
{
//should I use redirAttr.addAttribute() or redirAttr.addFlashAttribute() here ?
//...
return "redirect:/somewhere";
}
La redirection attributs seront alors disponibles sur la page cible où il redirige vers.
Cependant RedirectAttributes de classe dispose de deux méthodes:
Ont été la lecture de Printemps de la documentation pour un moment, mais je suis un peu perdu. Qu'est-ce que les fondamentaux différence entre les deux, et comment dois-je choisir lequel utiliser?
Vous devez vous connecter pour publier un commentaire.
Ici est la différence:
addFlashAttribute()
effectivement stocke les attributs dans un flashmap(qui est maintenue en interne dans les utilisateurs
session
et enlevéune fois que la prochaine redirigé demande est satisfaite)
addAttribute()
essentiellement des constructions les paramètres de la demande devos attributs et redirige vers la page désirée avec la demande
les paramètres.
De sorte que le avantage de
addFlashAttribute()
sera que vous pouvez stocker pratiquement n'importe quel objet dans votre flash attribut (comme il n'est pas sérialisé en demande params à tous, mais comme un objet), alors qu'avecaddAttribute()
, puisque l'objet que vous ajoutez est transformé à une requête normale param, vous êtes assez limité pour les types d'objet commeString
ou primitives.Supposons que vous disposez de 2 contrôleurs.Si vous rediriger à partir d'un contrôleur à l'
un autre contrôleur de les valeurs dans le modèle objet n'est pas disponible dans le
autre contrôleur. Donc, si vous voulez partager le modèle des valeurs de l'objet
ensuite, vous avez à dire en premier contrôleur de
Puis deuxième du contrôleur de modèle contient maintenant au-dessus de la valeur de la clé de pair..
Deuxième question ? Quelle est la différence entre
addAttribute
etaddFlashAttribute
dansRedirectAttributes
classeaddAttribute
permettra de transmettre les valeurs que requestparameters au lieu de modèle,de sorte que lorsque vous ajoutez un peu de l'aide deaddAttribute
vous pouvez accéder à ces valeurs derequest.getParameter
Voici le code.J'ai utilisé pour savoir ce qui se passe :
Javadoc description:
"Un FlashMap fournit un moyen pour une demande de stocker les attributs destinés à une utilisation dans un autre. Ceci est le plus souvent nécessaire lors de la redirection d'une URL à un autre-par exemple le Post/Redirect/Get modèle. Un FlashMap est enregistré, avant la redirection (généralement dans la session) et est disponible après la redirection, et retiré immédiatement."