在开发过程中我们经常会遇到表单提交数据时,具有相同属性名的两个对象。
先创建两个对象,用户和产品
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Product {
private Integer id;
private String productName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
}
在使用springmvc的时候对于具有相同属性两个bean提交数据是,我可以在后台Controller中增加InitBinder对前端传递的参数进行绑定
@InitBinder("user")
public void initUser(WebDataBinder binder){
binder.setFieldDefaultPrefix("user.");
}
@InitBinder("product")
public void initProduct(WebDataBinder binder){
binder.setFieldDefaultPrefix("product.");
}
后台使用下面代码获取参数即可
@RequestMapping(value = "sava")
@ResponseBody
public String sava(User user,Product product){
return user.toString()+" "+product.toString();
}
前台传递参数是对应使用后端 InitBinder 中prefix作为前缀即可
<form class="form-horizontal m" action="save">
<input name="user.id" class="form-control" type="hidden" value="1">
<input name="user.name" class="form-control" type="hidden" value="张三">
<input name="product.id" class="form-control" type="hidden" value="100">
<input name="product.productName" class="form-control" type="hidden" value="火箭">
</form>
这样在后端Controller就可以获取对应用户id为1的张三购买产品id为100的火箭
在spingboot中如果需要用到上面方式进行参数传递就需要自己在封装一次bean
public class BeanForm {
private User user;//对象名称必须和前端的控件name的前缀名称一致
private Product product;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
}
改造一下spingboot的Controller
@RequestMapping(value = "save")
@ResponseBody
public String save(BeanForm beanForm){
return beanForm.getUser().toString()+" "+beanForm.getProduct().toString();
}