Spring路径绑定:它是直接绑定到变量还是调用构造函数/ setter?

时间:2010-12-22 08:18:28

标签: java spring spring-mvc

我有一个弹出绑定表单(modelAttribute),它显示用户信息。 用户的电话号码以格式化方式显示,但要求是号码保存到数据库中,没有任何标志。

因此,在我的用户对象的getter方法中,我根据规则格式化电话号码,在设置器中我将代码删除特殊符号。 格式化部分工作正常,但是我删除符号的setter部分似乎不会发生。

在我的构造函数中,我也做了:

setTelephoneNumber(TelephoneNumber);

因此构造函数也会调用setter。

我正在使用Spring 3.0.4和Spring-mvc。

有关此问题的任何意见以及如何解决此问题将不胜感激。

编辑: 控制器部分:

model.addAttribute(“user”,user);

JSP(缩短了一点,但这是要点.reportUrl是由门户环境引起的:

<form:form action="${submitUrl}" modelAttribute="user">
<form:input path="telephoneNumber"/>
</form>

型号phoneNumber setter:

if(!StringUtils.isBlank(telephoneNumber)){
    this.telephoneNumber = telephoneNumber.replaceAll("[^0-9]", "");
} else{
    this.telephoneNumber= "";
}

我认为是因为价值随着我使用的格式而落在数据库中。 (间隔)

2 个答案:

答案 0 :(得分:3)

即使这不是您问题的正确答案:

我强烈建议以其他方式进行格式化,然后使用setter getter

Spring 3.0提供了他们称之为“类型转换”的东西

使用它会更清洁。

答案 1 :(得分:0)

回到你的问题: Spring路径绑定:是直接绑定到变量还是调用构造函数/ setter?

作为我理解Java Doc和一些代码片段的票据,Spring使用BeanWrapperBeanWrapperImpl)来设置Bean的值(@see Reference: 5.4 Bean manipulation and the BeanWrapper)。和BeanWrapperImpl的行为类似于引用说: 使用setter和getter来访问“简单”值。

它与“5.4.1设置和获取基本属性和嵌套属性”一节中所述的引用完全相同:对于表达式“name”:

  

表示属性名称   对应方法getName()   或isName()和setName(..)

所以至少这回答了你的问题,所以我认为你的问题的原因是其他的东西。