Java---学习(6)

来源:互联网 发布:php namespace use 编辑:程序博客网 时间:2024/04/30 11:36

                  @ModelAttribute属性和@SessionAttribute属性主要用来在不同控制器和模型之间共享数据.默认情况下,map的信息只是在request当前请求有效,如果想在一个controller中共享数据,可以使用这两个属性。

               1.@ModelAttribute

             @ModelAttribute可以用在action方法上,也可以用在Controller上,一个Controller中标记@ModelAttribute的方法在其他方法执行前先执行。在调用所有方法之前先执行@ModelAttribute标记的方法

             

[java] view plain copy
print?
  1. @Controller  
  2. @RequestMapping(“/User”)  
  3. public class UserController {  
  4.       
  5.     @RequestMapping(value=“userdetail”)  
  6.     public String userdetail()  
  7.     {  
  8.         return “userdetail”;  
  9.     }  
  10.       
  11.     @ModelAttribute(“username”)  
  12.     public String GetUserName()  
  13.     {  
  14.         //访问controller之前,先执行@ModelAttribute标记的方法,可以在前台页面访问到共享数据  
  15.         return “公用账户”;  
  16.     }  
  17.   
  18. }  
@Controller@RequestMapping("/User")public class UserController {    @RequestMapping(value="userdetail")    public String userdetail()    {        return "userdetail";    }    @ModelAttribute("username")    public String GetUserName()    {        //访问controller之前,先执行@ModelAttribute标记的方法,可以在前台页面访问到共享数据        return "公用账户";    }}
    可以在前台页面访问到ModelAttribute标记的方法

                    

[html] view plain copy
print?
  1. <%@ page language=“java” contentType=“text/html; charset=UTF-8”  
  2.     pageEncoding=“UTF-8”%>  
  3. <!DOCTYPE html PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>  
  4. <html>  
  5. <head>  
  6. <meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10. ${username}  
  11. </body>  
  12. </html>  
<%@ 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中

               

[java] view plain copy
print?
  1. package com.springfirst.Controller;  
  2.   
  3. import org.springframework.stereotype.Controller;  
  4. import org.springframework.ui.ModelMap;  
  5. import org.springframework.web.bind.annotation.ModelAttribute;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.SessionAttributes;  
  8.   
  9. @Controller  
  10. @RequestMapping(“/User”)  
  11. @SessionAttributes(“id”)  
  12. public class UserController {  
  13.       
  14.     @RequestMapping(value=“userdetail”)  
  15.     public String userdetail(ModelMap model)  
  16.     {  
  17.         model.addAttribute(”id”“0001”);  
  18.         return “userdetail”;  
  19.     }  
  20.       
  21.     @ModelAttribute(“username”)  
  22.     public String GetUserName()  
  23.     {  
  24.         //访问controller之前,先执行@ModelAttribute标记的方法,可以在前台页面访问到共享数据  
  25.         return “公用账户”;  
  26.     }  
  27.   
  28. }  
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标记可以访问到

            

[java] view plain copy
print?
  1. @RequestMapping(value=“userdetail”)  
  2.     public String userdetail(@ModelAttribute(“username”) String name,ModelMap model)  
  3.     {  
  4.         System.out.print(name);  
  5.         model.addAttribute(”id”“0001”);  
  6.         return “userdetail”;  
  7.     }  
@RequestMapping(value="userdetail")    public String userdetail(@ModelAttribute("username") String name,ModelMap model)    {        System.out.print(name);        model.addAttribute("id", "0001");        return "userdetail";    }