您的位置:首页 > 编程语言 > Java开发

Spring mvc 前端表单传递来的数据被后台的两个entity的相同名字的属性谁获取的问题

2017-10-30 19:22 381 查看
原文地址:http://blog.csdn.net/outlook008/article/details/8455710当我们的input标签里面写着如下的代码是这样的   <input type='text' name='orderId' /> 会赋值到Springmvc的方法上的实体的orderId的属性上。当然,后台拥有属性名为orderId的实体只有一个那还好说,如果是两个的话,那就有点麻烦。当然也是有办法的。加入一个实体的变量是order 里面含有orderId属性 worker实体也含有orderId属性。我们可以这样写 <input type='text' name='order.orderId' />  和 <input type='text' name='worker.orderId' />来区分是哪个实体的成员变量我们先写一个自定义的注解package com.thinkgem.jeesite.modules;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestBean {String value() default "_def_param_name";}我们再为这个注解写一个解析器package com.thinkgem.jeesite.modules;import org.springframework.beans.BeanWrapper;import org.springframework.beans.BeanWrapperImpl;import org.springframework.beans.propertyeditors.CustomDateEditor;import org.springframework.core.MethodParameter;import org.springframework.web.bind.support.WebArgumentResolver;import org.springframework.web.context.request.NativeWebRequest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Iterator;public class BeanArgumentResolver implements WebArgumentResolver {@SuppressWarnings("rawtypes")public Object resolveArgument(MethodParameter param, NativeWebRequest request) throws Exception {RequestBean requestBean = param.getParameterAnnotation(RequestBean.class);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);if (webParam.startsWith(_param)) {paramsMap.put(webParam, webValue);}}BeanWrapper obj = new BeanWrapperImpl(object);//obj.findCustomEditor(paramClass, paramString)obj.registerCustomEditor(Date.class, null, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));//WebDataBinder.System.out.println(obj.findCustomEditor(Date.class, null).getAsText());for (String propName : paramsMap.keySet()) {String[] 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);}}/** Field[] fields = clazz.getDeclaredFields(); for(Field* field:fields){ obj.setPropertyValue(field.getName(),* paramsMap.get(_param +"."+field.getName())); }** for(String porpName:paramsMap.keySet()){ String[] params =* paramsMap.get(porpName); if (null != params) { Object* field=obj.getPropertyValue(porpName.replaceFirst(_param+".",* "")); Class* clz=obj.getPropertyType(porpName.replaceFirst(_param+".", ""));* System.out.println(porpName.replaceFirst(_param+".",* "")+":"+field+" "+clz); if(field==null){* //field=obj.getPropertyType(porpName.replaceFirst(_param+".",* "")).newInstance(); }* obj.setPropertyValue(porpName.replaceFirst(_param+".", ""),* params); } }*//** Method[] methods = clazz.getMethods(); for (Method m : methods) {* Class[] parClazzs = m.getParameterTypes(); String methodName =* m.getName(); if (parClazzs.length == 1 &&* methodName.startsWith("set")) {** String[] params = paramsMap.get(_param +* methodName.toLowerCase().replace("set", "."));** if (parClazzs[0].equals(String.class)) { if (null != params) {* m.invoke(object, new Object[] { params[0] }); } } else if* (parClazzs[0].equals(String[].class)) { if (null != params) {* m.invoke(object, new Object[] { params }); } } }** }*/return object;} else {return WebArgumentResolver.UNRESOLVED;}}}在Spring的xml配置文件上加上一些xml片段<mvc:argument-resolvers><bean class="com.thinkgem.jeesite.modules.BeanArgumentResolver"/></mvc:argument-resolvers>在我们的Controller中就可以这样写得以区分@RequestMapping(value = {"hehe", ""})public String hehe(@RequestBean("order") Order order, @RequestBean("workerDepositInfo") WorkerDepositInfo workerDepositInfo) {
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐