2009-12-06 179 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