SpringMVC框架-13:详解@ModelAttribute注解的功能

    xiaoxiao2025-06-26  6

    第一个功能:指定存入model中数据的key值

    当我们从前台往后台传入一个对象模型的时候,他会自动将这个模型存到model中

    比如这里我们通过表单向后台传了一个对象过去

    <form action="${pageContext.request.contextPath}/request1.action" method="get"> 姓名:<input name="user_name" type="text"> 年龄:<input name="user_age" type="text"> <input type="submit" value="提交"> </form>

    我们通过一个controller来接收,这里的user是会自动存入到model的request域中 

    @RequestMapping(value = {"request1"}) public String test6(@ModelAttribute("biguser") User user,Model model){ System.out.println("======="); System.out.println(model.asMap()); return "/resoult.jsp"; }

    如果让其自动存入,那么他的key值是这个对象类型的首字母小写作为key,@ModelAttribute就可以指定这个key值,比如这里我们指定这个key为biguser

    注意点:标记了@ModelAttribute的注解后,往model存的数据如果是同名的key,那么他们并不是真正的替换,而是把有的替换,没有的继续保留原来的。

     第二个功能:在所有对应的requestMapping执行之前执行一个方法(当然,这里要把它贴到方法上)

    首先,我们随意定义一个方法,在它上面贴上@ModelAttribute注解

    @ModelAttribute public void modelatt(){ System.out.println("执行了方法"); }

    在前端有一个表单

    <form action="${pageContext.request.contextPath}/request1.action" method="get"> 姓名:<input name="user_name" type="text"> 年龄:<input name="user_age" type="text"> <input type="submit" value="提交"> </form>

    后台有个方法进行接收 

    @RequestMapping(value = {"request1"}) public String test6(@ModelAttribute("biguser") User user,Model model){ System.out.println("======="); System.out.println(model.asMap()); return "/resoult.jsp"; }

    结果就是,被 @ModelAttribut注解贴上的方法,会在本来映射的方法之前执行

    看,先执行了被修饰的方法,后面再执行了映射方法

    最新回复(0)