华为云4核8G,高性能云服务器,免费试用 >>>   

SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素)

众所周知,在SpringMVC中不支持类似struts2的点语法传参法则,因此多个对象同名参数传递势必会造成一定的问题。

  1. SpringMVC的参数传递非常智能,可自动装配参数到对象

public class User{private String name;private String id;private String gender,private String age;//getter 和setter
}
----------------------------------
public class Food{private String name;private String id;private String price,private String date;//getter 和setter
}
-------
<form method='post' action='url'>
用户名 <input type='text' name='name'>
用户id <input type='text' name='id'>
食品名 <input type='text' name='name'>
食品id <input type='text' name='id'><input type='text' name='gender'><input type='text' name='age'><input type='text' name='price'><input type='text' name='date'>
</form>--------
@requestMap(value={'/order/book'})
public string show(User u,Food f){}

在上述情况下User 和food都不能得到正确的name和id,或者说更本得不到,这要是struts2就方便多了,直接使用点语法 u.name,u.id,f.name,f.id....

为了解决上述问题,有2中方案:

1.是建立一个DTO

优点是可以认为的避免参数的传递,直接改dto的字段名 u_name,u_id,f_name,f_id,gender,age,date,price都要列出来,然后作如下操作

然后修改表单字段和contoller

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'><input type='text' name='gender'><input type='text' name='age'><input type='text' name='price'><input type='text' name='date'>
</form>@requestMap(value={'/order/book'})
public string show(UserFoodDto dto){
//然后拆分,将字段
User u = new User();
Food f = new Food();u.setName(dto.getUname());
f.setName(dto.getname());u.setUid(dto.getUid());
f.setFid(dto.getFid());u.setAge(dto.getAge);
f.setPrice(dto.getPrice);
.....
}

缺点是:如果数据量大,100百个字段,修改的地方自然越多,而且一个dto,拆分也很费力,因此不建议使用在数据量大的情况下

2.使用桥连接,将不同的部分专门封装成一个对象(推荐)

优点:减少了冲突,减少了工作量

缺点:冲突字段/总字段趋近于1时显得没必要(不过,这种情况几乎很少出现,除非是继承关系,但继承关系完全可以使用子类来传值,所以这个问题你就当没遇到过)

表单如下

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'><input type='text' name='gender'><input type='text' name='age'><input type='text' name='price'><input type='text' name='date'>
</form>-----将冲突的字段专门建立一个javaBean
public String UFBridge{private String uname;private String uid;private String fname;private String fid;
}
--------------------------
@requestMap(value={'/order/book'})
public string show(User u,Food f,UFBridge ufb){u.setName(ufb.getUname());f.setName(ufb.getUname());u.setId(ufb.getUid);f.setId(ufb.getFid);
}

3.使用相应的注解@InitBinder,可以做出类似struts2的方案(不推荐,代码量增加,灵活度不够)

如下博文

SpringMVC同名参数绑定问题

springmvc注解形式的开发参数接收

try doing it

SpringMVC 传递相同名称的参数的最佳方法相关推荐

  1. springmvc 传递和接收数组参数

    java url中如何传递数组,springMVC框架controller类如何接收数组参数? 下面介绍一下URL中传递数组参数方法: dd.do?titles[]=col1&titles[] ...

  2. 在C#中解析命令行参数的最佳方法? [关闭]

    构建带有参数的控制台应用程序时,可以使用传递给Main(string[] args) . 过去,我只是索引/循环该数组,并做了一些正则表达式来提取值. 但是,当命令变得更复杂时,解析可能会变得很丑陋. ...

  3. ajax 入参为list_ajax传递给后台数组参数方式

    出自:http://blog.csdn.net/lingxyd_0/article/details/10428785 在项目上用到了批量删除与批量更改状态,前台使用了EasyUI的DataGrid,用 ...

  4. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    SpringMVC入门(二)-- 参数的传递.Controller方法返回值.json数据交互.异常处理.图片上传.拦截器 参考文章: (1)SpringMVC入门(二)-- 参数的传递.Contro ...

  5. springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格

    springMVC获取异步请求的参数 JQuery发送异步请求回顾 <a href="javascript:void(0);" id="testAjax" ...

  6. 【SpringMVC入门】SpringMVC环境搭建、接收参数的几种方式、视图解析器、@ResponseBody

    一.SpringMVC 简介 1.SpringMVC 中重要组件 1.1 DispatcherServlet: 前端控制器,接收所有请求(如果配置/不包含jsp) 1.2 HandlerMapping ...

  7. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  8. php 小程序页面传参,介绍小程序中传递参数的实现方法

    这篇文章主要介绍了微信小程序 参数传递详解的相关资料,需要的朋友可以参考下 微信小程序的推出,无疑将会在移动互联网行业里再次掀起风浪. 有人会质疑小程序会不会火, 会不会火我不知道, 看微信的用户量即 ...

  9. request.getParameter和SpringMVC后台控制层获取参数的方式

    **1. request.getParameter** 转载于:http://blog.csdn.net/moreorless/article/details/4199677 一. 简单的对比 req ...

最新文章

  1. 【转】蓝牙物理链路类型:SCO和ACL链路
  2. ​你可能不知道的7个HTML小技巧
  3. 墨刀原型制作 位置选择_原型制作不再是可选的
  4. 子网掩码相关教学 子网掩码快速算法 沉睡不醒blog
  5. System中不存在类型或命名空间名称Transactions
  6. python使用shell命令_python 调用shell命令的方法
  7. oracle procedures批量删除带索引条件数据很慢_redis数据结构、持久化、缓存淘汰策略...
  8. mcrp 对接软件换
  9. 区块链 用户身份权限模式 方案
  10. Tensorflow模型量化(Quantization)原理及其实现方法
  11. winhex恢复误GHOST系统造成的数据丢失
  12. 回答朋友关于美团点评业务线工作体验
  13. 《Unity 3D游戏客户端基础框架》系统设计
  14. HTML实现手机端适配
  15. 项目Beta冲刺(3/7)(追光的人)(2019.5.25)
  16. LTE连接态读取系统消息SIB24疑问
  17. 基于三相VSR的SVPWM调制
  18. Android 手机安装有微信,还是提示未安装微信
  19. 《薛兆丰经济学讲义》阅读笔记|第一节-真实世界 经济学的视角
  20. 小程序踩坑之地图定位不精准的问题

热门文章

  1. 进度条小飞机移动动画
  2. k层交叉检验(k-flod cross-validation)
  3. Array deduplication
  4. 我的世界服务器拔刀修复,我的世界拔刀剑怎么修复
  5. 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)
  6. 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...
  7. java jtable导出txt_如何将jtable中的文本数据保存到文件中
  8. mysql数据库之单表查询
  9. WPF设置全局字体和字体嵌入
  10. 标准差分进化算法matlab程序实现(转载)