2009-12-06 121 views
5

我是新来的春天很抱歉之间的弹簧状态,如果这是一个初学者的问题,但该手册是不明确(至少不是我)保持与请求

我的问题是:如何共享之间的状态春季要求? 我可以使用ModelMap将数据从控制器发送到视图,但ModelMap中的数据不会通过视图发送回下一个控制器。 我怎样才能用弹簧做到这一点?

下面是我的源代码的一部分。在第二个控制器中,modelMap不包含存储在第一个控制器的modelMap中的数据。 春天我应该如何在控制器之间保持状态?

非常感谢您的帮助。

@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 
} 

回答

0

通常(并且没有Spring),这些数据将进入servlet会话。

+0

或者在状态EJB。 – duffymo 2009-12-06 20:16:33

+0

有状态EJB如何与Web应用程序一起工作? – Bozho 2009-12-06 21:39:03

6

您可以将modelMap放置在HttpSession或(更适用于较大的应用程序),使用Spring web flow,您可以在其中进行所谓的对话。

+0

如何访问我的控制器中的HttpSession? (我熟悉的Servlet,但不带弹簧) – Karl 2009-12-06 20:30:46

+0

看http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html 13.11.4 – Bozho 2009-12-06 21:12:13

+0

需要使用什么[这](HTTPS ://stackoverflow.com/q/48355807/3425489)场景?考虑我的搜索条件是我的“bean” – 2018-02-21 06:27:37

4

春季做到这一点,最彻底的方法是使用一个会话作用域的Spring Bean。 bean的实例对会话是私有的,并且在每个会话开始时将由Spring进行实例化和管理。这个bean可以保持你的对话状态。

在幕后,这个机制使用标准HttpSession属性,但它意味着你的代码没有直接处理HttpSession,所以它是清洁的整体。

relevant part of the Spring docs(和here)如何配置和使用它。

-1

自己做。

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

非常感谢你的建议,我解决它通过标记为ModelMap为会话attibutes键:

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

您是如何在后续请求中访问这些属性的。 – 2017-03-22 09:21:02