SpringMVC,ajax,怎么传递带List的复杂的参数啊 ?

Teacher对象有tid,tname,List<Student>studentList;通过ajax发送请求,publicvoidinsertTeacher(Teach... Teacher对象 有 tid,tname, List<Student> studentList;
通过ajax 发送请求, public void insertTeacher( Teacher teacher ){ ... }
这里应该怎么写啊?要封装到参数里面去。
展开
 我来答
后创意控9286
2016-12-01 · TA获得超过279个赞
知道小有建树答主
回答量:254
采纳率:50%
帮助的人:125万
展开全部
  着重看看 #{isReaded} 和 collection="messageIds",这里也是跟 Java 实体类逐个对应,十分称心。

  值得一说的是 ,它主要就是用来构建 in() 条件。

  - item 表示集合中每一个元素进行迭代时的别名

  - index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置

  - open 表示该语句以什么开始

  - separator 表示在每次进行迭代之间以什么符号作为分隔符

  - close 表示以什么结束

  其中在指定“collection”属性时比较容易出错:

  - 如果传入的是单参数且参数类型是一个 List 的时候,collection 属性值为 list

  - 如果传入的是单参数且参数类型是一个 array 数组的时候,collection的 属性值为 array

  foreach 元素的属性主要有软件开发公司http://www.yingtaow.com?item、index、collection、open、separator、close。

  ```javascript

  viewMessage: function (messageId) {

  console.info('viewMessage');

  // 通过 id 获取完整数据对象

  var message = $.grep($messageDatagrid.datagrid('getRows'), function (n, i) {

  return n.messageId == messageId

  })[0];

  console.info(message);

  // 如果该条记录是“未读”则更新为“已读”

  if (message.isReaded == YesOrNoEnum.No) {

  var updateReadState = {

  isReaded: YesOrNoEnum.Yes,

  messageIds: [messageId]

  }; $.ajax({

  data: JSON.stringify(updateReadState),

  url: UrlEnum.UpdateReadState,

  type: "POST",

  dataType: "json",

  contentType: 'application/json;charset=utf-8', //“参数为泛型集合 @RequestBody List<> 时”需设置请求头信息

  success: function (result) {

  console.info('updateReadState success,返回数据如下:↓');

  console.info(result);if (result.success) {

  $.messager.show({

  title: '提示', // 头部面板上显示的标题文本。

  msg: result.message

  });$messageDatagrid.datagrid('load');

  // 确保没有任何缓存痕迹(必不可少)

  $messageDatagrid.datagrid('clearChecked');

  $messageDatagrid.datagrid('clearSelections');

  }

  else {

  if (result.operationType == operationTypeEnum.CookieTimeout) {

  result.message = decodeURIComponent(result.message);

  }

  $.messager.alert('提示', result.message, 'warning');

  }

  },

  error: function (result) {

  }

  }); // end ajax

  } // isReaded = no

  }

  ```

  在传递复杂类型的数据时,注意 Ajax 方法的 data 和 contentType 两个参数的设置。在 data 属性中用到了 JSON.stringify(),目的是将 data 属性转化为“JSON字符文本”形式,也是防止 jQuery 内部把 data 属性转化成了“查询字符串”格式(key1=valu1&key2=value2),倘若如此 SpringMVC 就不好识别解析了。

  ## Java 实体类

  ```javascript

  public class BaseMessageUpdateReadState extends BaseEntity {

  private List messageIds;

  private IntegerisReaded;public List getMessageIds() {

  return messageIds;

  }public void setMessageIds(List messageIds) {

  this.messageIds = messageIds;

  }public Integer getIsReaded() {

  return isReaded;

  }public void setIsReaded(Integer isReaded) {

  this.isReaded = isReaded;

  }

  }

  ```

  该实体类就是一个复杂形式的实体类,把实体类 BaseMessageUpdateReadState 的字段与客户端的 JSON 对象 updateReadState 作比较,可见二者是如此一致,需注意一下的是 js 中的数组与 Java 中的泛型集合 List 相对应。

  ## 控制器

  ```javascript

  @RequestMapping(value = "/UpdateReadState", method = RequestMethod.POST)

  @ResponseBody

  public TransactionResult UpdateReadState(@RequestBody BaseMessageUpdateReadState baseMessageUpdateReadState, @CookieValue(value = "base_cookieKey", required = false) CookieObject cookieObject) {

  baseMessageUpdateReadState.setCookieObject(cookieObject);

  TransactionResult result = null;

  try {

  result = iBaseMessageService.UpdateReadState(baseMessageUpdateReadState);

  return result;

  } catch (RuntimeException e) {

  result = new TransactionResult(false);

  if (e.getMessage() == null) {

  ByteArrayOutputStream buf = new java.io.ByteArrayOutputStream();

  e.printStackTrace(new java.io.PrintWriter(buf, true));

  String expMessage = buf.toString();

  try {

  buf.close();

  } catch (IOException e1) {

  e1.printStackTrace();

  }

  result.setMessage(expMessage);

  } else {

  result.setMessage(e.getMessage());

  }

  return result;

  }

  }

  ```

  在控制器方法中,参数 BaseMessageUpdateReadState 前面必须带上 @RequestBody,它负责将 JSON 格式的复杂参数转化为 Java 实体类,非常的方便。

  ## MyBatis 应用

  接口:

  ```javascript

  int affectedRows = iBaseMessageDao.UpdateReadState(baseMessageUpdateReadState);

  ```

  XML映射器:

  ```javascript

  Update BaseMessage

  Set

  IsReaded = #{isReaded}

  Where 1=1

  and MessageId in

  #{item}

  ```
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式