Spring MVC是否使用getter和setter来设置ModelAttribute对象的值?你能不能引用我这样说的消息来源。如果没有,我们如何强制Spring MVC使用setter来设置模型对象的属性?
感谢。
答案 0 :(得分:3)
我不知道这是否真的回答了这个问题,但我在文档中找到了这句话:
命令或表单对象将请求参数绑定到bean属性(通过setter)或直接绑定到字段,具有可自定义的类型转换,具体取决于@InitBinder方法和/或HandlerAdapter配置。 ... ModelAttribute注释可用于方法参数,以自定义使用的模型属性名称。
这似乎意味着如果可用的话,将使用setter,并直接更新字段作为后备。
但是如果你想要一个明确的答案,请查看源代码。
答案 1 :(得分:0)
我也遇到过这个问题,情况如下:
代码段:
Product.java
public class Product {
private String name;
private String imageStr;
private List<ProdutImage> productImageList;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public List<ProductImage> getProductImageList() {
return this.productImageList;
}
public void setProductImageList(List<ProductImage> productImageList) {
this.productImageList = productImageList;
if (productImageList != null) {
this.imageStr = [...]// convert list to json string
}
}
}
它没有直接设置“imageStr”,但是基于图像列表字段,jsp页面喜欢:
<form>
<input type="text" name="product.name"/>
<input type="text" name="product.productImageList[0]"/>
<input type="text" name="product.productImageList[1]"/>
<input type="text" name="product.productImageList[2]"/>
</form>
提交表单时,“name”和“productImageList”都可以成功填充,有一点不同,我把断点都放在“setName”和“setProductImageList”中,我们可以发现“setName”是调用,但不是“setProductImageList”,因为这样,“imageStr”为空。