@ModelAttribute

  在执行Controller方法前都会新建一个Map对象称为隐含模型,该Map对象是共享的,如果一个方法的入参为Map ModelAndMap ModelMap等类型,那么会把隐含模型当做入参赋给方法。所以这提供了另一种间接给Controller传递参数的方法:在A方法中向隐含模型写入数据,可以在B方法中访问隐含模型间接得到A方法传递的数据。

  比如执行以下方法可以发现打印内容为true。  

    @RequestMapping("c")
    public String c(Map map1,Map map2){
        System.out.println(map1==map2);
        return "success";
    }

  向隐含模型中写入数据的方法是标注@ModelAttribute,该注解可以标注在方法和入参上。

  标注在方法上时,@ModelAttribute方法会提前执行,并且在该方法内所有向map写入的内容都会保存在隐含模型里。当访问b控制器的时候能够获得键user对应想内容。

@Controller
public class testYinHan {

    @ModelAttribute
    public void a(ModelMap map){
        map.put("user","xu");
        System.out.println(map.get("user"));

    }

    @RequestMapping("b")
    public String b(ModelMap map){
        System.out.println(map.get("user"));
        return "success";
    }
}

  标注在某一个方法的入参上,就等于把该方法放入了隐含模型中,省去了put的步骤。

  并且在返回到视图的时候也会把隐含模型的内容暴露给视图。

  

  

 

  

  

posted @ 2019-04-02 22:35  AshOfTime  阅读(272)  评论(0编辑  收藏  举报