我對Spring世界很陌生,嘗試了一些與Spring MVC和會話處理相關的內容。春季模型屬性覆蓋與同名的會話屬性
我的問題是,如果我們有模型屬性和會話屬性的同名,那麼模型屬性是否會覆蓋會話屬性的值?
在下面的代碼片段中(對於格式不好的道歉,我在這裏是新的)我將一個屬性名稱sessionAttribute添加到模型和會話中。在JSP中訪問相同的屬性時,我獲得了模型屬性的值([名稱]作爲模型屬性)。
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String hello(@RequestParam(value="username", required=false,defaultValue="World") String name, Model model,HttpServletRequest req) {
model.addAttribute("sessionAttribute", name+" as Model Attribute");
System.out.println("In controller");
HttpSession hs=req.getSession();
hs.setAttribute("sessionAttribute","overridden Session attribute"); //prints"overridden Session attribute"
System.out.println(hs.getAttribute("sessionAttribute"));
return "someViewName";
}
下面是視圖(someViewName),它是印刷sessionAttribute的值作爲模型屬性
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring4 MVC -HelloWorld</title>
</head>
<body>
<% HttpSession hs=request.getSession();
String sesstionAttr=(String)session.getAttribute("sessionAttribute");
out.println(sesstionAttr); //printin [name] as Model Attribute
%>
</body>
</html>
您正在將'''ssionAttribute''添加到HttpSession中,然後從中讀取。爲什麼必須打印其他內容('''hs.getAttribute(「sessionAttribute」)'''正在從session中獲取:))?在這裏看到一個主題btw,http://stackoverflow.com/questions/3423262/what-is-modelattribute-in-spring-mvc – vtor 2015-02-09 11:24:36
用更多的細節更新了這個問題。 在控制器中,我獲得了預期的價值,但在訪問會話屬性的JSP中,我獲得了模型屬性的價值。 – 2015-02-09 11:41:28
我想你需要檢查這個:http://stackoverflow.com/questions/16383439/spring-mvc-difference-between-httpsession-setattribute-and-model-addobject – 2015-02-09 13:40:10