我有一个弹出绑定表单(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= "";
}
我认为是因为价值随着我使用的格式而落在数据库中。 (间隔)
答案 0 :(得分:3)
即使这不是您问题的正确答案:
我强烈建议以其他方式进行格式化,然后使用setter getter
Spring 3.0提供了他们称之为“类型转换”的东西
使用它会更清洁。
答案 1 :(得分:0)
回到你的问题: Spring路径绑定:是直接绑定到变量还是调用构造函数/ setter?
作为我理解Java Doc和一些代码片段的票据,Spring使用BeanWrapper(BeanWrapperImpl)来设置Bean的值(@see Reference: 5.4 Bean manipulation and the BeanWrapper)。和BeanWrapperImpl的行为类似于引用说: 使用setter和getter来访问“简单”值。
它与“5.4.1设置和获取基本属性和嵌套属性”一节中所述的引用完全相同:对于表达式“name”:
表示属性名称 对应方法getName() 或isName()和setName(..)
所以至少这回答了你的问题,所以我认为你的问题的原因是其他的东西。