spring mvc 接受多对象的处置
spring mvc 接受多对象的处理
spring mvc感觉非常好用,尤其是对接收对象參数的自己主动绑定非常简便,但对于同一时候传多个对象时有些困扰。
同一时候项目并没有直接使用spring的formtag。
从网上学来的多对象传值。自己优化了下,原文找不到出处了这里记录下。
首先声明一个注解类,用于对传值对象的声明
/**
* 处理spring mvc 对象绑定注解
*
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBean {
String value() default "_def_param_name";
}
然后是一个对WebArgumentResolver的实现类,对象參数绑定主要是这个类来处理
/**
* 对象传值的參数绑定处理
*
*/
public class BeanArgumentResolver implements WebArgumentResolver {
@SuppressWarnings("rawtypes")
public Object resolveArgument(MethodParameter param, NativeWebRequest request){
RequestBean requestBean = param.getParameterAnnotation(RequestBean.class);
try{
if (requestBean != null) {
String _param = requestBean.value();
if (_param.equals("_def_param_name")) {
_param = param.getParameterName();
}
Class clazz = param.getParameterType();
Object object = clazz.newInstance();//依据參数类型实例化对象
HashMap<String, String[]> paramsMap = new HashMap<String, String[]>();
Iterator<String> itor = request.getParameterNames();//获取全部的请求參数
while (itor.hasNext()) {
String webParam = (String) itor.next();//迭代获取请求參数
String[] webValue = request.getParameterValues(webParam);//获取请求參数相应的全部值
List<String> webValueList = new ArrayList<String>();
for(int i = 0;i<webValue.length;i++){
if(webValue[i]!=null&&!"".equals(webValue[i])){
webValueList.add(webValue[i]);//获取不为空的值
}
}
if (webParam.startsWith(_param)&&!webValueList.isEmpty())/*推断參数是否以方法參数名为开头*/ {
paramsMap.put(webParam, webValueList.toArray(new String[webValueList.size()]));
}
}
BeanWrapper obj = new BeanWrapperImpl(object);//此类能够实现设置和获得属性的功能。
obj.registerCustomEditor(Date.class, null, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
//System.out.println(obj.findCustomEditor(Date.class, null).getAsText());
//下面为给对象属性赋值
for (String propName : paramsMap.keySet()) {
Object propVals = paramsMap.get(propName);
String[] props = propName.split("\\.");
if (props.length == 2) {
obj.setPropertyValue(props[1], propVals);
} else if (props.length == 3) {
Object tmpObj = obj.getPropertyValue(props[1]);
if (tmpObj == null)
obj.setPropertyValue(props[1], obj.getPropertyType(props[1]).newInstance());
obj.setPropertyValue(props[1] + "." + props[2], propVals);
}
}
return object;
}
}catch(Exception e){
e.printStackTrace();
}
return WebArgumentResolver.UNRESOLVED;
}
}
两个类写好后对mvc配置文件进行配置
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="xx.xx.xx.xx.BeanArgumentResolver" />
</mvc:argument-resolvers>
<mvc:message-converters register-defaults="true">
<!-- 将StringHttpMessageConverter的默认编码设为UTF-8 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
<!-- 将Jackson2HttpMessageConverter的默认格式化输出设为true -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prettyPrint" value="true"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
接下来就是使用了mvc的controller方法例如以下
@RequestMapping(value="/saveEvent")
@ResponseBody
public AjaxResult saveEvent(@RequestBean Event event){
event =eventService.saveTemporaryEvent(event);
return AjaxResult.objectResult(event);
}
页面form表单代码
<td align="right">客户代码:</td>
<td><input type="hidden" name="event.submitUser.userId" value="${event.submitUser.userId }" /></td>
<td align="right">客户电话:</td>
<td><input class="inpname_" type="text" id="submitTel" name="event.submitTel" value="${event.submitTel }"/></td>
spring mvc 接受多对象的处置的更多相关文章
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- Spring mvc接受集合类型参数的方法
public String xxxxx(String xxxx, String xxxxx, @RequestParam("parameterList[]") List<St ...
- spring mvc 接受前台json @RequestBody json 属性 空 使用 JsonProperty spring mvc 获取json转乘bean
请给json序列序列化成的javabean 属性加上 @JsonProperty(value = "real_name") 否则 springmvc 可能接受不到数据 ja ...
- Spring MVC接受参数的注解
一.Request请求发出后,Headler Method是如何接收处理数据的? Headler Method绑定常用的参数注解,根据处理request的不同部分分为四类: A.处理 Request ...
- spring mvc 接受数组
@RequestParam(value = "customerIds[]")Integer[] customerIds 加上 requestParam value设置为 &qu ...
- spring mvc get请求也可以接受DTO对象
spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...
- Spring MVC(八)--控制器接受简单列表参数
有些场景下需要向后台传递一个数组,比如批量删除传多个ID的情况,可以使用数组传递,数组中的ID元素为简单类型,即基本类型. 现在我的测试场景是:要从数据库中查询minId<id<maxId ...
- Spring MVC(五)--控制器通过注解@RequestParam接受参数
上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...
- Spring MVC(四)--控制器接受pojo参数
以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...
随机推荐
- Android Support Library更新到v22.1之AppCompat新特性
构建一个可以跑在不同版本 Android 平台的软件,是非常复杂和耗时的.为了解决这个问题,Android 推出了 Android Support Library (安卓兼容包),让新的UI控件也可以 ...
- php 父类子类构造函数注意事项
网上流传的2点: PHP的构造函数继承必须满足以下条件: 当父类有构造函数的声明时,子类也必须有声明,否则会出错. 在执行父类的构造函数时,必须在子类中引用parent关键字. 第1点不需要. 第二个 ...
- atlas z 轴
问题源自一个帖子,因为上传的图比较多,就另开了这个贴写下自己的试验结果,原帖在下面链接中 http://game.ceeger.com/forum/read.php?tid=8911#info NGU ...
- zk set 方法
[root@wx03 zook]# cat a4.pl use ZooKeeper; use AnyEvent; use AE; use Data::Dumper; my $zk = ZooKeepe ...
- 基于visual Studio2013解决算法导论之053图的邻接表表示
题目 图的邻接表表示 解决代码及点评 // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include <iostream> #include <sta ...
- 组件接口(API)设计指南-文件夹
组件接口(API)设计指南-文件夹 组件接口(API)设计指南[1]-要考虑的问题 组件接口(API)设计指南[2]-类接口(class interface) 组件接口(API)设计指南[3]-托付( ...
- Excel自己定义纸张打印设置碰到无法对上尺寸的问题
作者:iamlaosong 据操作人员反映.自己定义纸张设置无论用,打印时每页表头都会下移,非常快就跑偏到下涨纸了. 打印机是针打,齿轮进纸.应该非常精确的.初步怀疑纸张尺寸量的有问题,建议其多量几页 ...
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
Google为Android平台开发Web Service客户端提供了ksoap2-android项目,在这个网址下载开发包http://code.google.com/p/ksoap2-androi ...
- 一天一个类,一点也不累之HashSet
最近忙着一个小项目结题,故没能按时完成[一天一个类,一点也不累],还好项目优秀,算是对自己一点点的安慰和鼓励.~~~ 今天要说的是HashSet 既然是继承自Set,那么就必须有Set的一些属性,比如 ...
- 16-UIKit(AutoLayout、Animation)
目录: 一.AutoLayout自动布局 二.动画(Animation) 回到顶部 一.AutoLayout自动布局 1.什么是AutoLayout 从ios6开始引入的新技术,是新版的自动布局技术 ...