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对应的属性 ...
随机推荐
- Clojure学习01:开始起步
我们先要了解下什么是Clojure,我们从它的特性来了解: 1.首先它是一门编程语言,并且它写的程序是运行在jvm上的,同java语言一样. 2.Clojure代码可以使用任意java类库,反之jav ...
- Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactory
Error creating bean with name ‘org.springframework.validation.beanvalidation.LocalValidatorFactoryBe ...
- Sitemesh3的使用及配置
1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术.参考:百度百科,相关类似技术:A ...
- 设计模式(六)桥连模式Bridge(结构型)
设计模式(六)桥连模式Bridge(结构型) 1. 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够 ...
- oschina程序开发
程序开发 102脚本编程语言 36地图相关 7Epub电子图书工具 109UI组件库 16代码生成工具 25SVG开发包 17推荐引擎 3指纹识别 23拼音转换工具包 24蓝牙开发 295GUI开发框 ...
- 常见makefile写法
原文地址:blog.csdn.net/ghostyu/article/details/7755177 1.目标名称,摆脱手动设置目标名称 TARGET = $(notdir $(CURDIR)) al ...
- Pencil OJ 01 开发的准备
操作系统 ubuntu-12.04.5-desktop-amd64.iso 基本应用 Node 0.12.7 MongoDB 3.0.4 Robomongo 0.8.4 Atom 参考资料 OJ hu ...
- yii框架网址解析问题
转载请注明来自souldak,微博:@evagle 首先如果你在config/main.php里面没有配置urlManager的话,那么流程如下(摘自yii官网) 用户发出了访问 URL http:/ ...
- android软键盘弹出隐藏的监听
通过网上搜索关于软键盘的隐藏弹出的监听,有几种方式,其中最有效的方式是在View的Onlayout()里面做文章 具体代码: 将布局视图自定义,重写onlayout()方法,然后在主Activity里 ...
- 网页制作之JavaScript部分 1 - 语法(复制教材内容)
一.简介 1.JavaScript它是个什么东西? 它是个脚本语言,需要有宿主文件,他的宿主文件是html文件. 2.它与Java有什么关系? 没有什么直接联系,java是Sun公司(已经没有了,被O ...