SpringMVC-Model家族&@ModelAttribute和@SessionAttributes注解

Spring中Model家族之间的区别

1. Model
Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类
这里写图片描述
这里写图片描述

2. ModelMap
ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建
这里写图片描述
这里写图片描述

3. ModelAndView
ModelAndView指模型和视图的集合,与ModelMap不同,他需要用户自己手动创建
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


@ModelAttribute注解的使用

准备前提

<div style="position: relative">
        <form method="post" action="" style="position: absolute;left: 40%;top: 200px;">
            <table cellspacing="0" cellpadding="5px" border="1">
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="username"></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="password" name="pwd"></td>
                </tr>
                <%--<input type="hidden" name="choose" value="1">
                <input type="hidden" name="test" value="1">--%>
                <tr style="text-align: center">
                    <td colspan="2"><input type="submit" value="提交"></td>
                </tr>
            </table>
        </form>
    </div>

1. 运用在方法上
1.1 @ModelAttribute注解void返回值的方法

@Controller
public class HelloModelController {

        @ModelAttribute
        public void populateModel(@RequestParam("username") String abc, Model model) {
            model.addAttribute("attributeName", abc);
            System.out.println(111);
        }

        @RequestMapping(value = "/helloWorld",method = RequestMethod.POST)
        public String helloWorld() {
            return "forward:/test.jsp";
        }

}

这里写图片描述

1.2 @ModelAttribute注释有返回值的方法

@Controller
public class HelloModelController {
    @ModelAttribute 
    public Users populateModel(Users  users) {  
      return users; 
    }  

    @RequestMapping("/helloWorld")  
    public String helloWorld() {  
        System.out.println("进入....");
       return "forward:/test.jsp";  
    }

}

1.3 @ModelAttribute支持对象合并

@Controller
public class HelloModelController {
    //方法一
    @ModelAttribute 
    public Users populateModel(Users  users) {  
      users.setAddress("zxcxzvzv");
      return users; 
    }  

    @RequestMapping("/helloWorld")  
    public String helloWorld() {  
        System.out.println("进入....");
       return "forward:/test.jsp";  
    }

    //方法二
    /*@ModelAttribute
        public Users populateModel() {
            Users users=new Users();
            users.setAddress("zxcxzvzv");
            return users;
        }

        @RequestMapping("/helloWorld")
        public String helloWorld(Users users) {
            System.out.println("进入....");
            return "forward:test.jsp";
        }*/

}

2.运用在参数上

@Controller
@RequestMapping(value="hello")
public class ModelAttributeTest {
    @ModelAttribute("user1")
    public User getUser() {
        User user = new User();
        user.setId(1L);
        user.setName("jjjj");
        user.setPassword("iiiii");
        return user;

    }

    @RequestMapping(value = "hello7")
    public ModelAndView doHello6(
            @ModelAttribute("user1")
                    User user, ModelAndView modelAndView) {


        System.out.println(user + ":hello7");
        modelAndView.setViewName("redirect:/hello/hello4.do");
        return modelAndView;
    }

    @RequestMapping(value = "hello4", method = {RequestMethod.GET, RequestMethod.POST})
    public String doHello4(Map<String, Object> map) {

        System.out.println(map.get("user1"));

        return "success";
    }

}

@SessionAttributes注解的使用

意义:若希望在多个请求之间共用某个模型属性数据,则可以在
控制器类上标注一个 @SessionAttributes, Spring MVC
将在模型中对应的属性暂存到 HttpSession 中。

储存方式:
– @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
– @SessionAttributes(value={“user1”, “user2”})
– @SessionAttributes(types={User.class, Dept.class})
– @SessionAttributes(value={“user1”, “user2”},
types={Dept.class})

参考原博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值