• Spring @SessionAttributes注解 @ModelAttribute注解


    一、@SessionAttribute详解

    如果多个请求之间需要共享数据,就可以使用@SessionAttribute。

    配置的方法:

    在控制器类上标注@SessionAttribute。

    配置需要共享的数据范围。

    这样,就可以将model中的属性同步到session中了。

    注意:

    默认情况,SpringMVC会将model的数据存放在request域中。

    此时,当一个请求结束之后,数据将会失效

    因此,当数据需要跨页面使用时,就需要将数据存放到session中。

    @SessionAttributes就是将指定的model中的数据拷贝到session中。

    使用方法:

    @SessionAttribute中,

    value指定需要放入会话的属性名称

    type指定需要放入会话的属性类型

    @SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。

    @SessionAttributes(value={“user1”, “user2”}) 会将model中属性名为user1和user2的属性添加到会话中。

    @SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 User和Dept的属性添加到会话中。

    @SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。

    @SessionAttributes(value={"user"})
    @Controller
    public class UserController {
    
        @RequestMapping("/testSessionAttributes")
        public String testSessionAttributes(Model model){
            User user = new User("jack","123456");
            model.addAttribute("user", user);
            return "success";
        }
    } 

     

    在前端取值: 

    ${requestScope.user}

    ${sessionScope.user}

    二、@ModelAttribute详解

    主要的作用:

    将数据添加到model对象中,用于视图页面展示的时候使用。

    @ModelAttribute注解的方法,在controller中每个处理方法被调用之前,都会按照先后顺序被执行一次。

    因此,当一个controller映射多个URL,使用该注解需要谨慎。

    注解使用情形:

    (1)  @ModelAttribute 注释没有返回值的方法:
    @Controller
    @RequestMapping(value="/")
    public class TestModelAttributeController {
    	
    	@RequestMapping(value="/result")
    	public String login(Model model) {
    		//如果测试成功,控制台输出true
    		System.out.println(model.containsAttribute("username"));
    	    System.out.println(model.containsAttribute("pwd"));
    		return "result"; 
    	}
    	@ModelAttribute
    	public void user(
    			@RequestParam("username") String username,
    			@RequestParam("pwd") String pwd,Model model) {
    		 model.addAttribute("username", username);
    		 model.addAttribute("pwd", pwd);
    	}
    }  

    在@RequestMapping注解的方法被调用时,在这个方法之前,@ModelAttribute方法将会先被执行。

    model.addAttribue("key",value)绑定键值。

    上面这种情况,当URL或者post没有传递参数时,会报错。

    (2) @ModelAttribute 注释返回具体类的方法
    @ModelAttribute
    public User userModel(@RequestParam("username") String username,@RequestParam("pwd") String pwd){
        User  user = new User(username,pwd);
        return user;
    }

    这里,model属性的名称没有指定。

    由返回类型隐含表示。

    属性名称是user。

    (3)@ModelAttribute(value="")注释返回具体类的方法
    @Controller
    @RequestMapping(value="/")
    public class TestModelAttributeController{
    	
    	@RequestMapping(value="result")
    	public String login(Model model) {
    		model.containsAttribute("username");
    		return "result";
    	}
        /*
        * 返回的是username的值
        *相当于model.addAttribute("username", username);
        */
    	@ModelAttribute(value="username")
    	public String userModel(@RequestParam("username") String username) {
    		return username;
    	}
    }
    

      

    (4)@ModelAttribute和@RequestMapping同时注释一个方法
    @Controller
    @RequestMapping(value="/")
    public class TestModelAttributeController{
    	
    	@ModelAttribute("username")
    	@RequestMapping(value="/result")
    	public String login(@RequestParam("username") String username,Model model) {
    		
    		System.out.println(model.containsAttribute("username"));
    		return username;	
    	}
    }

    @ModelAttribute(“xxx”)的属性值作为model的attributeName,login方法返回值作为attributeName的属性值;

    RequestMapping("/yyy")作为请求路径,也同时作为视图名,即跳转页面的名称

  • 相关阅读:
    c#调用dll,::CoInitialize(NULL)出错
    使用 Anthem.NET 的常见回调(Callback)处理方式小结
    主题和皮肤学习
    得到任意网页源代码 (利用WebClient和WebRequest类)
    HTML marquee标签详解
    制作一个简单的天气预报
    CSS中的类class和标识id选择符(.和#号)
    String split '.'
    Map 的 clear() 方法会清空 Map对象
    sqLite 执行查询语句时报错__及SimpleCursorAdapter
  • 原文地址:https://www.cnblogs.com/jszfy/p/11398803.html
Copyright © 2020-2023  润新知