2011-06-08 70 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