2009-12-06 4 views
5

Je suis nouveau au printemps désolé si cela est une question de débutants, mais le manuel est pas clair (du moins pas pour moi)maintenir l'état avec ressort entre les demandes

Ma question est la suivante: comment puis-je partager l'état entre demandes au printemps? Je peux envoyer des données du contrôleur à la vue à l'aide d'une ModelMap, mais les données de la ModelMap ne sont pas renvoyées au contrôleur suivant par la vue. Comment est-ce que je peux faire ceci avec le ressort?

Voici une partie de mon code source. Dans le second contrôleur, le modelMap ne contient pas les données stockées dans le modelMap dans le premier contrôleur. Comment suis-je censé maintenir l'état entre les contrôleurs au printemps?

merci beaucoup pour votre aide.

@RequestMapping(value = "find/something", method = RequestMethod.GET) 
public String foo(@RequestParam("parent") Parent parent, ModelMap modelMap) {  
... 
    modelMap.addAttribute("question_index", 42); 
    modelMap.addAttribute("something", new Something()); 
    modelMap.addAttribute("data", new Data()); 
    return "some/view"; 
} 

<form:form action="bla" method="POST" modelAttribute="data"> 
...// using Something() and 42 
</form:form> 

@RequestMapping(value = "bla", method = RequestMethod.POST)  
public String bla(@ModelAttribute("data") Data data, BindingResult result, ModelMap modelMap) { 
System.out.println(modelMap); // doesn't contain question_index, or something 
} 

Répondre

0

Typiquement (et sans ressort), de telles données iraient dans la session de servlet.

+0

Ou dans un EJB stateful. – duffymo

+0

Comment les EJB stateful fonctionnent-ils avec les applications Web? – Bozho

6

Vous pouvez soit mettre le modelMap dans le HttpSession, ou (préférable pour les applications plus grandes), utilisez Spring web flow où vous pouvez avoir les soi-disant conversations.

+0

Comment puis-je accéder au HttpSession dans mes contrôleurs? (Je suis familier avec les Servlets mais pas avec le ressort) – Karl

+0

Regardez http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html 13.11.4 – Bozho

+0

quoi utiliser pour [this] (https : //stackoverflow.com/q/48355807/3425489) scénario? Considérer mes critères de recherche est 'haricot 'dans mon e.g. –

4

La méthode la plus propre pour le faire au printemps est avec un haricot de printemps à portée de session. Les instances du bean seront privées à la session et seront instanciées et gérées par Spring au début de chaque session. Ce haricot peut contenir votre état de conversation.

Sous les couvertures, ce mécanisme utilise les attributs HttpSession standard, mais cela signifie que votre code n'a pas à traiter directement avec HttpSession, donc il est globalement plus propre.

Voir le relevant part of the Spring docs (et here) pour savoir comment le configurer et l'utiliser.

-1

faites-le vous-même.

<form:form action="bla" method="POST" modelAttribute="data"> 
    <input type="hidden" name="data" value="${data}"/> 
</form:form> 
1

Merci beaucoup pour vos suggestions, je l'ai résolu en balisant les clés de la ModelMap session-attibutes:

@SessionAttributes({ "question_index", "something" }) 
@Controller 
public class MyController{ 
... 
} 
+0

Comment avez-vous accédé à ces attributs dans les demandes suivantes? –

Questions connexes