1. 程式人生 > >Spring Mvc那點事---(6)Spring Mvc @ModelAttribute屬性和@SessionAttribute屬性

Spring Mvc那點事---(6)Spring Mvc @ModelAttribute屬性和@SessionAttribute屬性

                  @ModelAttribute屬性和@SessionAttribute屬性主要用來在不同控制器和模型之間共享資料.預設情況下,map的資訊只是在request當前請求有效,如果想在一個controller中共享資料,可以使用這兩個屬性。

               [email protected]

   @ModelAttribute可以用在action方法上,也可以用在Controller上,一個Controller中標記@ModelAttribute的方法在其他方法執行前先執行。在呼叫所有方法之前先執行@ModelAttribute標記的方法

@Controller
@RequestMapping("/User")
public class UserController {
	
	@RequestMapping(value="userdetail")
	public String userdetail()
	{
		return "userdetail";
	}
	
	@ModelAttribute("username")
	public String GetUserName()
	{
		//訪問controller之前,先執行@ModelAttribute標記的方法,可以在前臺頁面訪問到共享資料
		return "公用賬戶";
	}

}
    可以在前臺頁面訪問到ModelAttribute標記的方法
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
${username}
</body>
</html>
               2.@SessionAttributes

 使用SessionAttributes可以將map中的資訊放置到session中共享,通常情況下SessionAttributes主要標記在controller上,指定哪些資訊需要存放到session中,下面的程式碼我們將id存放到session中

package com.springfirst.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/User")
@SessionAttributes("id")
public class UserController {
	
	@RequestMapping(value="userdetail")
	public String userdetail(ModelMap model)
	{
		model.addAttribute("id", "0001");
		return "userdetail";
	}
	
	@ModelAttribute("username")
	public String GetUserName()
	{
		//訪問controller之前,先執行@ModelAttribute標記的方法,可以在前臺頁面訪問到共享資料
		return "公用賬戶";
	}

}

     區別

            1.使用SessionaAttributes標記的屬性主要把資訊放到session中,主要標記在Controller上

             2.使用ModelAttribute標記的主要用在方法上,然後在Action的方法引數裡面加上ModelAttribute標記可以訪問到

@RequestMapping(value="userdetail")
	public String userdetail(@ModelAttribute("username") String name,ModelMap model)
	{
		System.out.print(name);
		model.addAttribute("id", "0001");
		return "userdetail";
	}