Spring PropertyEditor实现绑定时的类型转换
来源:互联网 发布:网络上exm是什么意思 编辑:程序博客网 时间:2024/05/17 04:42
public class DataBinderTestModel{private String username;private boolean bool;//Boolean值测试private PhoneNumberModel phoneNumber;//String->自定义对象的转换测试private Date date;//日期类型测试public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public boolean isBool() {return bool;}public void setBool(boolean bool) {this.bool = bool;}public PhoneNumberModel getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(PhoneNumberModel phoneNumber) {this.phoneNumber = phoneNumber;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}}
//如格式010-12345678 public class PhoneNumberModel {private String areaCode;//区号private String phoneNumber;//电话号码public String getAreaCode() {return areaCode;}public void setAreaCode(String areaCode) {this.areaCode = areaCode;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}}
/** * PropertyEditorSupport:一个PropertyEditor的支持类; * setAsText:表示将String——>PhoneNumberModel,根据正则表达式进行转换,如果转换失败抛出异常,则接下来的验证器会进行验证处理; * getAsText:表示将PhoneNumberModel——>String。 * @author thinkpad * */public class PhoneNumberEditor extends PropertyEditorSupport{Pattern pattern = Pattern.compile("^(\\d{3,4})-(\\d{7,8})$");@Overridepublic void setAsText(String text) throws IllegalArgumentException {if(text == null || !StringUtils.hasLength(text)) {setValue(null); //如果没值,设值为null}Matcher matcher = pattern.matcher(text);if(matcher.matches()) {PhoneNumberModel phoneNumber = new PhoneNumberModel();phoneNumber.setAreaCode(matcher.group(1));phoneNumber.setPhoneNumber(matcher.group(2));setValue(phoneNumber);} else {throw new IllegalArgumentException(String.format("类型转换失败,需要格式[010-12345678],但格式是[%s]", text));}}@Overridepublic String getAsText() {PhoneNumberModel phoneNumber = ((PhoneNumberModel)getValue());return phoneNumber == null ? "" : phoneNumber.getAreaCode() + "-" + phoneNumber.getPhoneNumber();}}
/** * initBinder:第一个扩展点,初始化数据绑定器,在此处我们注册了两个属性编辑器; * CustomDateEditor:自定义的日期编辑器,用于在String<——>日期之间转换; * binder.registerCustomEditor(Date.class, dateEditor):表示如果命令对象是Date类型,则使用dateEditor进行类型转换; * PhoneNumberEditor:自定义的电话号码属性编辑器用于在String<——> PhoneNumberModel之间转换; * binder.registerCustomEditor(PhoneNumberModel.class, new PhoneNumberEditor()):表示如果命令对象是PhoneNumberModel类型,则使用PhoneNumberEditor进行类型转换; * @author thinkpad * */@SuppressWarnings("deprecation")public class DataBinderTestController extends AbstractCommandController {public DataBinderTestController() {setCommandClass(DataBinderTestModel.class); //设置命令对象setCommandName("dataBinderTest");//设置命令对象的名字}@Overrideprotected ModelAndView handle(HttpServletRequest req, HttpServletResponse resp, Object command, BindException errors) throws Exception {//输出command对象看看是否绑定正确System.out.println(command);return new ModelAndView("bindAndValidate/success").addObject("dataBinderTest", command);}@Overrideprotected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {super.initBinder(request, binder);//注册自定义的属性编辑器//1、日期DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");CustomDateEditor dateEditor = new CustomDateEditor(df, true);//表示如果命令对象有Date类型的属性,将使用该属性编辑器进行类型转换binder.registerCustomEditor(Date.class, dateEditor);//自定义的电话号码编辑器binder.registerCustomEditor(PhoneNumberModel.class, new PhoneNumberEditor());}}
加bean:
<bean name="/dataBind" class="com.boventech.learning.controller.DataBinderTestController"/>
/bindAndValidate/success.jsp:
EL phoneNumber:${dataBinderTest.phoneNumber}<br/>EL date:${dataBinderTest.date}<br/>
最后结果应该是:
EL phoneNumber:com.boventech.learning.entity.PhoneNumberModel@1bb8e19
EL date:Sun Mar 18 16:48:48 CST 2012
改改:
输入地址:
http://localhost:8080/E-learning/dataBind?username=sunhuwh&bool=yes&phoneNumber=010-12345678&date=2012-3-18%2016:48:48
0 0
- Spring PropertyEditor实现绑定时的类型转换
- Springmvc PropertyEditor实现绑定时的类型转换
- Springmvc PropertyEditor实现绑定时的类型转换
- Springmvc PropertyEditor实现绑定时的类型转换
- 数据绑定时的转换问题
- Spring PropertyEditor 相关类的模拟实现
- spring 强大的PropertyEditor
- Spring的自定义PropertyEditor
- 探秘Spring的PropertyEditor
- SpringMVC源码总结(八)类型转换PropertyEditor的背后
- SpringMVC源码总结(八)类型转换PropertyEditor的背后
- SpringMVC源码总结(八)类型转换PropertyEditor的背后
- 解决GridView绑定时无法将类型为 <>f__AnonymousType0`2[xx] 的对象强制转换为类型“xxx”的方法
- Spring的FactoryBean与PropertyEditor
- spring配置自定义的PropertyEditor
- ListView结合DataPager实现分页的功能(数据绑定时)
- 绑定时获取到绑定项的索引
- datalist数据绑定时发生的事件
- C++Primer学习笔记《2》
- netty学习之Channel接口
- ffmpeg(11) pmt_cb
- NSTimer 用法总结
- Netty Channel 接口名词理解
- Spring PropertyEditor实现绑定时的类型转换
- Springmvc PropertyEditor实现绑定时的类型转换
- OpenCv cv::Mat类用法
- ArcGIS Unable to Start service
- netty学习之ServerChannel
- STL 中的SET使用方法
- 懒人服务器 - 教程三、了解如何应用(DotNet客户端)
- ChannelConfig
- netty学习之ChannelEvent