关于@ModelAttribute注解使用的一些细节
* 3.***关于@ModelAttribute注解***
*
* 1).@ModelAttribute注解的方法总是在没有被注解的方法之前先执行。
*
* 2).@ModelAttribute可以注解方法返回值,也可以注解方法形参。
*
* 3).@ModelAttribute注解返回值与方法形参,这两种方式都会使被注
* 解的参数以注解的value值为key存入Model中。即被注解的数据都
* 会被存入到Model中。
*
* 4).当使用@ModelAttribute没有指定value值时,默认值为被注解数
* 据(返回值,形参)的数据类型的首字母小写。
* 注意:默认值不是数值对象名,而是数据类型的首字母小写。
*
* 5).# 当控制器的方法参数不是实体类的情况:
* * 如果使用了@ModelAttribute注解,则绑定Model中的数据,没有使用则
* 还是默认绑定请求参数中的数据。
* * 控制器的方法参数不能直接绑定Model中的数据,使用@ModelAttribute
* 注解方法参数才能。否则方法形参只能从请求参数中绑定。(除了实体类类
* 型的参数)
*
* # 当控制器的方法参数是实体类的情况:
* *当方法的参数是实体类对象时,实体类的属性优先绑定请求参数中的数据,
* 如果请求参数对于形参实体类来说并不完整,则形参不全的部分属性的数
* 据会在Model中寻找,寻找相同类型的实体类,如果找到则将那个实体类
* 的部分数据(对应自己缺少的那部分数据)绑定到形参的实体类中。
*
* 细节:如果形参实体类的对象名能匹配Model中的实体类数据的key,则
* 能够实现绑定;如果形参实体类的名称与Model中对应的实体类数
* 据的key不相同,则需要使用@ModelAttribute注解该形参并指明
* value为Model中那个实体类的key才行,否则无法绑定。
*
* 例如:
* 当请求参数有:name=zzq
* 此时的方法形参:user->name=zzq,money=null
* 当Model有: user->name=wlj,money=1234.0
* 此时的方法形参:user->name=zzq,money=1234.0
*
* 个人总结:
* 被@ModelAttribute注解了的方法会在控制器其它方法前先执行,类
* 似于初始化;@ModelAttribute注解的主要作用就是将被注解的形参
* 或返回值的结果存入Model中;@ModelAttribute注解可以让方法的
* 形参绑定Model中的数据;若没有指定@ModelAttribute注解的value
* 值,则默认值为绑定数据的类型名首字母小写;
*
* 感受:这里的坑太多,用法太多过于灵活,容易使人混淆,要结合多种情况并实践。