同属性绑定,初始化绑定前缀
加了之后,根据前端传值的前缀可以区分,要是没有前缀,仍然会两个都绑定上
User与Admin属性名称一样,前端传入的时候,会二者都绑定上。
InitBinder,在请求请入到controller的时候,先执行,然后再执行具体的方法。它的作用域是当前这个controller
同属性的多对象数据绑定 @InitBinder public void initUser(WebDataBinder binder){ binder.setFieldDefaultPrefix("user."); }
基本类型、包装类、数组、简单对象和多层级对象无需调整controller,只是说URL中格式会有一些区别
添加@InitBinder之后,URL请求中指定前缀的字面量区别对待,不指定前缀表示属性字面量一致。
同属性多对象绑定
@InitBinder(“a”)
public void initA(WebDataBinder binder){
binder.setFieldDefaultPrefix("a.");
}
@InitBinder("b")
public void initB(WebDataBinder binder){
binder.setFieldDefaultPrefix("b.");
}
SpringMVC绑定数据——同属性的多对象(两个类具有相同的属性)
@InitBinder注解:访问Controller时,执行相应方法前,会首先执行该注解下的方法进行一个初始化,然后再执行相应的方法。
案例:User类和Admin类具有相同的属性name和age,如果直接在请求中传入name=?&age=?,那么User类和Admin类的属性都会被赋值为相同的值,如果想区分并赋值,如下图。
@InitBinder 注解用于初始化一个对象
对于两个不同的类,遇到同名属性的情况,SpringMVC会默认针对所有类的同名属性赋值,如截图中的age。如果想要区别对待,直接使用xxx.xxx的形式是不行的,还需要在对应的Controller中定义方法,以 @InitBinder 注解标记属性名,形参使用 WebDataBinder 来定义请求参数前缀,如截图。
在url中传递参数的出现同属性时,可以通过InitBinder方法进行初始化,再属性前加前缀来区别,若没加前缀则是共有的
@InitBinder("user")
public void intUser(WebDataBinder binder){ binder.setFieldDefaultPrefix("user.");
}
WebDataBinder @InitBinder
对于两个不同的类,遇到同名属性的情况,SpringMVC会默认针对所有类的同名属性赋值,如截图中的age。如果想要区别对待,直接使用xxx.xxx的形式是不行的,还需要在对应的Controller中定义方法,以 @InitBinder 注解标记属性名,形参使用 WebDataBinder 来定义请求参数前缀,如截图。
同属性的多对象
同属性多对象通过@initBinder注解解决
初始化绑定
如果同属性多对象不用@InitBinder 注解,直接对象.属性 的话,后台传的值都为空
同属性的多对象