之前写过一篇《扩展SpringMVC以支持更精准的数据绑定1》用于完成类似于struts2的数据绑定;有朋友可能觉得自己写个参数解析器扩展比较麻烦,在此再介绍下springmvc内置的支持。
代码片段如下:
//http://localhost:9080/es-web/binder/test1?user1.id=1&user2.id=2 @RequestMapping("/test1") public String test1(@ModelAttribute("user1") User user1, @ModelAttribute("user2") User user2) { System.out.println(user1); System.out.println(user2); return ""; } @InitBinder("user1") public void initBinder1(WebDataBinder binder) { binder.setFieldDefaultPrefix("user1."); } @InitBinder("user2") public void initBinder2(WebDataBinder binder) { binder.setFieldDefaultPrefix("user2."); }
此处使用@InitBinder() 中间的value,用于指定命令/表单属性或请求参数的名字,符合该名字的将使用此处的DataBinder,如我们的@ModelAttribute("user1") User user1 将使用@InitBinder("user1")指定的DataBinder绑定;如果不指定value值,那么所有的都将使用。
DataBinder.setFieldDefaultPrefix 意思是设置参数的前缀,如我们的是"user1.",此处不能少了".",
这种方式的缺点:
1、不支持Path variable的绑定,如/test1/{user1.id}这种情况的绑定;
2、不支持如集合/数组的绑定;
如果需要复杂的绑定可以直接使用《扩展SpringMVC以支持更精准的数据绑定1》介绍的方式。下载最新的可以参考:
FormModelMethodArgumentResolver.java
ParentController.java (绑定集合的例子)
另外可以通过DataBinder完成如下几件事情:
1、binder.setAllowedFields("id") : 设置允许的字段,比如我只想设置id,那么可以调用这个方法,那么其他属性会忽略;
2、binder.setDisallowedFields("id") : 设置不允许的自动,比如我不想设置id,那么可以调用此方法,这个属性将不设置;
3、binder.setRequiredFields() : 表示哪些字段是必填的;
4、binder.setValidator() :设置自定义的验证器,如果如JSR-303不适合,可以使用这个。
5、binder.registerCustomEditor : 注册自定义的编辑器;可以参考《第四章 Controller接口控制器详解(6)——跟着开涛学SpringMVC 》
总体来说,如果进行简单的绑定,又不想引入@FormModel注解,那么使用这种方式是可以解决问题的。
在使用springmvc数据绑定时,还有一点需要注意(尤其如增删改 都使用同一个页面):
如果用的是原子类型,如int,但是界面上是:
<input type='text' name='id' value=''> 即值为空
那么会遇到如下异常:
Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'id'; nested exception is java.lang.NumberFormatException: For input string: ""]
建议:
1、最简单的办法 把int 改成---> Integer 即可 即系统的模型中只使用保证类型,
2、如果是新增 到新增页面时 给status一个默认值,可以考虑给个默认值
3、使用if-else 屏蔽掉
其实这个springmvc可以改进下,如果是空,给个默认值,这样也行。不过这总起来说还是使用者的问题。
相关推荐
SpringMVC入门很简单之数据绑定(下),具体参考博文:http://www.cnblogs.com/liukemng/tag/SpringMVC/
SpringMVC数据绑定及数据类型转换 文档中付例子
Springmvc前后台数据数组绑定,list超过了256时,会报错,如何解决?该文给出了说明
springmvc各种参数绑定源码实现
配置多数据源、SpringMVC框架下多数据源的配置问题、如何在同一个项目中使用多个数据库、如果在同一个项目中使用不同的数据库。
SpringMVC表单标签进行数据绑定(图书管理)DemoSpringMVC表单标签进行数据绑定(图书管理)Demo
spring mvc数据绑定示例,maven工程
springmvc数据绑定。
SpringMVC数据绑定入门 可以直接运行 可以 直接 下载 运行 学习SpringMVC 简单 易懂
springmvc 参数绑定例子,ajax 绑定,form绑定,对象绑定,参数绑定
spring MVC数据绑定 含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便 本人最开始也是这么认为 经过一段...
NULL 博文链接:https://jinnianshilongnian.iteye.com/blog/1717180
springmvc动态切换数据源demo,自己配置jdbc.properties文件
主要介绍了 SpringMVC 数据绑定实例详解的相关资料,需要的朋友可以参考下
SpringMVC+Mybatis(多数据源)+Mongo(多数据源),框架适合同时访问多种DB,且支持每种DB配置多个数据源。正如我代码中的demo,配置了两个mysql数据源+2个mongo数据源,可以在service实现中随意访问。除此之外还通过...
SpringMVC入门很简单之数据绑定(上),具体参考博文:http://www.cnblogs.com/liukemng/tag/SpringMVC/
springMVC通过mybatis绑定数据库 可以正常运行。
springMVC返回json数据需要的两个架包,加入springMVC使用@ResponseBody才不会报错。
采用springMVC去后台数据,做Echarts报表