Spring MVC是否使用setter方法设置ModelAttribute对象的属性?

时间:2012-02-02 02:52:30

标签: java spring spring-mvc

Spring MVC是否使用getter和setter来设置ModelAttribute对象的值?你能不能引用我这样说的消息来源。如果没有,我们如何强制Spring MVC使用setter来设置模型对象的属性?

感谢。

2 个答案:

答案 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”为空。