SpringMVC 多个对象的相同字段参数传递的最佳解决方案

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中方案:

第一种是建立一个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);
}

try doing it

时间: 2024-10-05 04:27:30

SpringMVC 多个对象的相同字段参数传递的最佳解决方案的相关文章

springmvc 接收js对象

js 对象 数组长什么样 见本人http://blog.csdn.net/baicp3/article/details/12752255这篇文章 我们直接上例子吧 data3为一个js对象,一会在java代码中接收的时候要一个entity 其里面的字段要跟js对象里面的字段对应上. var data3 =  { "sign" : "0", "remarks" : "ddddd", "firstKey" :

使用jni直接访问java对象中的字段

Java类:UserInfo public class UserInfo { static { System.loadLibrary("userinfo"); } // 从JNI中直接访问字段 public String mUserName; public int mUserAge; public long mMoney; public UserInfo() { } public int getUserAge() { return mUserAge; } public native v

resultset 对象获取行字段数据时报:java.sql.SQLException: Column &#39;id&#39; not found.

resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found. 代码: String sql="SELECT d.content,c.name AS categoryName FROM news_detail d,news_category c WHERE d.categoryId=c.id"; Object[] params ={}; System.out.println(this.executeQuery(sq

Java中对JSONArray中的对象的某个字段进行排序

需求: 今天调用一个第三方接口,然后返回的是一个josn数组,需要根据里面的"报告日期"报告日期进行由大到小排序,最新的排在前面. 这种别人接口已经开发完成,不能改,所以只有我们自己来排序. 思路一():将josn数组转为list集合,然后获取到里面的每个对象,再获取"报告日期",然后排序,然后对对应的对象排序. 思路二: 实现java的Collections.sort方法,自定义Comparator方法,然后排序. 这样效率比较高. 下面是测试和实现代码. imp

数组对象如何根据对象中某个字段分组

场景:做报表图形展示时,接口返回的数据通常为一组数据对象,需要根据code进行分组,将数据分类成几组,用图形描绘出来 措施:代码如下 返回数组对象包括name和data两个字段,data中包括原数组对象中所有字段. function groupByType(arr,param) { var map = {}, dest = []; for(var i = 0; i < arr.length; i++){ var ai = arr[i]; if(ai[param] && !map[ai

model字段对象和forms字段对象的区别和联系

一.model字段对象 (一)_meta _meta是django.db.models.options.Options的实例,获取字段对象可通过模型类来进行获取,而_meta可提供如下功能: 获取模型的所有字段实例 通过名称获取模型的单个字段实例 1.获取模型的单个字段实例 In [19]: models.Book._meta.get_field("title") Out[19]: <django.db.models.fields.CharField: title> 2.获

SpringMVC控制器接收不了PUT提交的参数的解决方案

摘要: SpringMVC控制器接收不了PUT提交的参数的解决方案 这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时间,这次来提下SpringMVC的PUT提交参数为null的情况. 照常先贴出我的控制器代码,没什么特别的,就是打印出接受到的前台参数值: @RequestMapping(value = "/{id}", method = RequestMethod.PUT) @ResponseBody

scala 第7讲 类的属性和对象的私有字段

温故而知新 之scala第7讲类的属性和对象私有字段百度云盘连接http://yun.baidu.com/share/home?uk=4013289088#category/type=0class Person { private var age = 0 def increment(){age += 1} def current = age } class Student{ private var privateAge = 0 val name = "Scala" def age =

SpringMVC 中List 对象转换成Json格式 List对象中属性为NUll解决

问题起因:今天在做一个EasyUI 同步树的时候,在SpringMVC中用 @ResponseBody标签将List<tree> 集合转换成Json数据的时候,出现一些原因. 问题描述:1.tree对象有个List<tree>属性需要为空,这个是做树用的,下级没值当然不能有null了 代码: [{"id":1,"text":"权限管理 ","state":"closed  ",&qu