2011-06-08 61 views
4

這個問題聽起來很奇怪,我在玩Spring MVC,並試圖在兩個頁面之間移動,基本上我使用Spring Form JSTL創建了一個JSP頁面,所以它只是使用POST,並使用控制器從一個頁面移動到另一個頁面。但是模型在頁面之間丟失了,我想隱藏實際的變量,所以QueryStrings不存在問題(就我所知, )。我知道我可以使用InternalResourceView,但只允許我使用模型。Spring MVC - 頁面之間的變量,以及取消設置SessionAttribute

我想傳遞一個獨佔的頁面的變量,沒有模型或使用QueryStrings的最佳方式是什麼?

我打算使用SessionAttribute來輕鬆定義它們,但想知道如何刪除SessionAttribute創建的變量?我試過HttpSession.removeAttribute,它似乎沒有工作。

回答

3
+0

你打我吧! – CoolBeans 2011-06-08 22:22:36

+0

@CoolBeans:什麼是可能性:)鍵入更快我的朋友。 – 2011-06-08 22:24:45

+0

不起作用,至少對於@SessionAttributes。我試圖去掉它並不會刪除它們。 – Nicholas 2011-06-08 23:47:55

5

您還可以使用SessionStatus.setComplete()這樣的:

@RequestMapping(method = RequestMethod.GET, value="/clear") 
public ModelAndView clear(SessionStatus status, ModelMap model, HttpServletRequest request) { 
    model.clear(); 
    status.setComplete(); 
    return new ModelAndView("somePage"); 
} 

或DefaultSessionAttributeStore.cleanUpAttribute這樣的:

@RequestMapping(method = RequestMethod.GET, value="/clear") 
public ModelAndView clear(DefaultSessionAttributeStore status, WebRequest request, ModelMap model) { 
    model.remove("mySessionVar"); 
    status.cleanupAttribute(request, "mySessionVar"); 
    return new ModelAndView("somePage"); 
} 

我使用它像這樣對我的一種形式有那多張sessionAttributes,我想只刪除其中的一個。

2

您可以使用WebRequest.removeAttribute(String name, int scope)與Spring @SessionAttributes一起使用。引用自@SessionAttributes javadoc - 「或者,考慮使用泛型{@link org.springframework.web.context.request.WebRequest}接口的屬性管理功能。」

也看看我的例子。

@Controller 
@SessionAttributes({"sessionAttr"}) 
public class MyController { 

    @ModelAttribute("sessionAttr") 
    public Object defaultSessionAttr() { 
     return new Object(); 
    } 

    @RequestMapping(value = "...", method = RequestMethod.GET) 
    public String removeSessionAttr(WebRequest request, Model model) { 
     request.removeAttribute("sessionAttr", WebRequest.SCOPE_SESSION); 

     model.addAttribute("sessionAttr", defaultSessionAttr()); 
     return "myView"; 
    } 

} 
+0

爲什麼它在請求之間不起作用?我已經刪除了這個。但新的sessionAttr我創建一個新的請求一些其他的處理程序,但只是刪除對象在先前的處理程序仍然存在於會話中 – 2017-10-05 12:56:18