Spring MVC-绑定日期字段

对于表示字符串,数字和布尔值的请求参数,Spring MVC容器可以立即将它们绑定到键入的属性。

Spring MVC容器如何绑定代表日期的请求参数?

说到哪一个,Spring MVC如何确定给定请求参数的类型?

谢谢!

回答:

Spring MVC如何确定给定请求参数的类型?

Spring利用ServletRequestDataBinder绑定其值。该过程可以描述如下

/**

* Bundled Mock request

*/

MockHttpServletRequest request = new MockHttpServletRequest();

request.addParameter("name", "Tom");

request.addParameter("age", "25");

/**

* Spring create a new command object before processing the request

*

* By calling <COMMAND_CLASS>.class.newInstance();

*/

Person person = new Person();

/**

* And then with a ServletRequestDataBinder, it binds the submitted values

*

* It makes use of Java reflection To bind its values

*/

ServletRequestDataBinder binder = new ServletRequestDataBinder(person);

binder.bind(request);

在后台,DataBinder实例在内部使用BeanWrapperImpl实例,该实例负责设置命令对象的值。使用getPropertyType方法,它检索属性类型

如果你在上面看到了提交的请求(当然,使用模拟),Spring将调用

BeanWrapperImpl beanWrapper = new BeanWrapperImpl(person);

Clazz requiredType = beanWrapper.getPropertyType("name");

然后

beanWrapper.convertIfNecessary("Tom", requiredType, methodParam)

Spring MVC容器如何绑定代表Date的请求参数?

如果你有需要特殊转换的友好数据表示形式,则必须注册一个PropertyEditor。例如,java.util.Date不知道什么是13/09/2010,所以你告诉Spring

Spring,,使用以下PropertyEditor转换此对人类友好的日期

binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {

public void setAsText(String value) {

try {

setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));

} catch(ParseException e) {

setValue(null);

}

}

public String getAsText() {

return new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());

}

});

当调用convertIfNecessary方法时,Spring会寻找任何已注册的PropertyEditor来处理转换提交的值。要注册你的PropertyEditor,你可以

spring3.0

@InitBinder

public void binder(WebDataBinder binder) {

// as shown above

}

旧式Spring 2.x

@Override

public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {

// as shown above

}

以上是 Spring MVC-绑定日期字段 的全部内容, 来源链接: utcz.com/qa/408933.html

回到顶部