之前写过一篇《扩展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以支持更精准的数据绑定1”这个主题中,博主探讨了如何通过自定义转换器和验证器来增强Spring MVC的数据绑定能力,以满足更为复杂的应用场景。 首先,我们要了解Spring MVC的数据绑定基础。在默认...
Vue.js,作为一款轻量级的前端框架,以其响应式的数据绑定和组件化开发模式,为系统的用户界面提供了流畅的交互体验。在本系统中,Vue被用来构建用户界面,通过组件化的方式,将复杂的界面拆分为可复用的模块,降低...
Vue.js的响应式数据绑定和虚拟DOM技术,使得界面更新更加高效,提高了用户体验。 微信小程序的集成,则意味着用户可以通过手机随时随地访问和使用平台服务。这不仅方便了老人及其家属,也使得养老监护工作能够实时...
在前端,Vue.js是一个轻量级的JavaScript框架,以其组件化开发、虚拟DOM和响应式数据绑定等特性受到开发者喜爱。在外卖点餐系统中,Vue.js可以构建用户友好的界面,实现动态加载、实时更新等功能,提高用户体验。 ...
- **SpringMVC**:基于Spring的Model-View-Controller框架,负责处理前端请求、数据绑定和视图渲染等。 - **MyBatis**:优秀的持久层框架,提供SQL映射机制,便于数据库操作。 - **技术特点**: - **高效性**:...