struts2 springmvc 多个对象时 如何准确绑定?
来源:互联网 发布:财务报销软件集思图友 编辑:程序博客网 时间:2024/05/29 18:08
比如,有两个对象
class Student{
private String name;
private String type; //比如有自费、公费
/**set/get方法*/
}
class teacher{
private String name;
private String level;
/**set/get方法*/
}
struts2的中jsp的写法是:
<form>
<input name="student.name" value="Kate" />
<input name="student.type" value="自费" />
<input name="teacher.name" value="Gavin" />
<input name="teacher.level" value="2" />
</form>
这样子在action中就能封装好student和teacher对象。
但是在spring中,要这么写:
@RequestMapping("/school.do")
public String school(Student student, Teacher teacher) {
return "school";
}
如果还是像刚才的jsp那些写表单,是不能封装参数的,必须把“student.”和“teacher.”去掉,但是这样封装就不能准确封装了。
所以写一个扩展很容易解决这个问题,springmvc和spring一样,预留的扩展点足够多。
我们都知道struts2默认就是这种方案,这是因为struts2采用了OGNL,并通过栈(根对象)进行操作的,而且栈中默认有action实例,所以很自然的没有这种问题。
springmvc不同,没有根对象的概念,而且本身很难来解决这个问题,因此大家在使用时最好避免这种方式或者使用类似于struts1的FormBean组合对象来解决。
解决方案:
扩展spring的HandlerMethodArgumentResolver以支持自定义的数据绑定方式。
支持springmvc 3.1.x,暂不支持3.0。因为springmvc 3.1 和 3.0 从架构上发生了变化,而且springmvc3.1更容易扩展。
1、请下载附件的代码,放到工程中;
2、在RequestMappingHandlerAdapter添加自定义HandlerMethodArgumentResolver Bean;
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!--线程安全的访问session-->
<property name="synchronizeOnSession" value="true"/>
<property name="customArgumentResolvers">
<list>
<bean class="cn.javass.spring.mvc.method.annotation.RequestJsonParamMethodArgumentResolver"/>
<bean class="cn.javass.spring.mvc.method.annotation.FormModelMethodArgumentResolver"/>
</list>
</property>
</bean>
//customArgumentResolvers用于注入自定义的参数解析器,此处我们注了FormModelMethodArgumentResolver;
FormModelMethodArgumentResolver是直接修改的org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor;
3、使用方式
4、测试控制器
支持绑定的数据:
模型、集合、数组、MapWapper(Map的一个包装器,通过getInnerMap获取真实Map)
缺点:
spring自定义的参数解析器会放在默认解析器之后,不能指定order,因此如果我们@FormModel("map") Map map,此map会变成Model!此处我们使用MapWapper解决,可以通过MapWapper.getInnerMap()拿到我们需要的Map
其他方案:
[SpringMVC]修改源码使之能够更加智能的自动装配request请求参数.(不建议修改源代码解决)
如果你使用的是mvc:annotation-driven,请这样配置
- struts2 springmvc 多个对象时 如何准确绑定?
- jquery如何对多个对象绑定同一事件
- jquery如何对多个对象绑定同一事件
- jquery 多个对象如何绑定同一事件
- springmvc form多对象映射 数据绑定 多对象绑定
- springmvc form多对象映射 数据绑定 多对象绑定
- 在PPt中快速准确地选择多个对象
- Springmvc+ajax如何通过ajax封装多个对象参数,controller接受多个对象参数
- springmvc命令对象绑定
- springMVC数据对象绑定
- SpringMVC-----SpringMVC接收多个对象参数
- springmvc如何将form表单中的对象类型绑定
- springMVC 提交多个对象
- springMVC接收多个对象
- struts2绑定对象数组
- 如何准确计算Java对象的大小
- JQuery一个对象绑定多个事件
- JQuery一个对象绑定多个事件
- 小波变换通俗解释
- 区别: 计算机视觉&图像处理&计算机图形学
- js小知识
- 是启动线程和调用线程的run方法
- CGAffineTransform(UIView仿射变换)
- struts2 springmvc 多个对象时 如何准确绑定?
- [转载]四轴飞行器1.4 姿态解算和Matlab实时姿态显示
- SQL SERVER 2008 R2序列号
- Python 为什么list不能作为字典的key?
- 反编译后代码混淆问题小分析
- 图像算法---白平衡AWB(讲的很好)
- Intellij IDEA 发布后的项目在哪里
- 单点登录
- Linux进程间通信---管道篇