Spring MVC Ajax 嵌套表单数据的提交

概述
在一些场景里,某个大表单里常常嵌套着一个或若干个小逻辑块,比如以下表单里“设计预审”中包括了一个子模块表单“拟定款项”。

在这种情况下该怎么去设计实体类以及表单呢?
实体类的设计
在设计实体类时最好的方式是“主模块包括了自己的字段,而子模块只通过一个属性被引用过来”,如下(以下字段都省略了 getter 和 setter 方法)。
主模块:
public class DesignApplyForAuditUpdate extends BaseEntity {
private String taskId;
private String taskComment;
private ProjectPaymentItem projectPaymentItem;
}
子模块:
public class ProjectPaymentItem extends BaseEntity {
// 定金
private BigDecimal earnestPromotionAmount;
private BigDecimal earnestPromotionPercentage;
// 首付工程款
private BigDecimal paymentPercentageFirstPay;
// 水电工程项
private BigDecimal paymentPercentageShuiDian;
}
表单的设计
在子模块元素,可以考虑使用“.”(点)操作符。大概看看主表单和子表单的模样。
主表单:
<td colspan="3">
<input class="easyui-textbox" type="text" name="taskComment" id="txtTaskComment_Edit"
data-options=" multiline:true, validType:'length[1,2000]', novalidate:'novalidate', width:435, height:58 "/>
</td>
子表单(内嵌于主表单之中):
<td colspan="3">
<span>已交纳</span>
<input type="text" class="easyui-numberbox" name="projectPaymentItem.earnestPromotionAmount"
id="txtEarnestPromotionAmount_Edit"
missingmessage="请确保是有效的数字"
min="0" max="99000000" precision="2"
data-options="width:150, required:true, novalidate:'novalidate' "/>
<span>元,优惠百分比:</span>
<input type="text" class="easyui-numberbox" name="projectPaymentItem.earnestPromotionPercentage"
id="txtEarnestPromotionPercentage_Edit"
missingmessage="请确保是有效的数字"
min="100" max="10000" precision="0"
data-options="width:150, required:true, novalidate:'novalidate' "/>
<span>%</span>
<div>
<span>可抵消金额:</span>
<span id="earnestPromotionResult">5000</span>
<span>元</span>
</div>
</td>
可以看到,子模块的 name 属性值前面需要通过点间隔符来补充一个前缀:“projectPaymentItem”
经过 Ajax 提交后,服务端会以主子结构完好的承接客户端的数据。

客户端的 Ajax 和 SpringMVC 控制器
对于表单数据的提交只需采用普通的 Ajax 配置来提交就可以,即使实体模型是嵌套层次。
- 客户收集数据以及 Ajax
// 表单值获取
var formData = $taskForm.form('r_serialize', false);
// 发起请求操作
$.ajax({
data: formData,
url: url,
type: "POST",
dataType: "json",
success: function (result) {
console.info("保存成功,返回的数据为:↓");
console.info(result);
if (result.success) {
$.messager.show({
title: '提示', // 头部面板上显示的标题文本。
msg: result.message
});
}
},
error: function (result) {
}
}); //end ajax
尽管要提交的数据存在嵌套,但这还不属性复杂模型,所以 Ajax 只需按普通数据来提交即可。
看一下提交的数据:

- SpringMVC 控制器接收数据
// 暂存
@RequestMapping(value = "/UpdateDesignApplyForAudit", method = RequestMethod.POST)
@ResponseBody
public TransactionResult UpdateDesignApplyForAudit(DesignApplyForAuditUpdate designApplyForAuditUpdate, @CookieValue(value = "base_cookieKey", required = false) CookieObject cookieObject) {
designApplyForAuditUpdate.setCookieObject(cookieObject);
TransactionResult result = null;
}
designApplyForAuditUpdate 的值如下:

最后提一下客户端针对子表单的赋值,尽管上述的取值很方便,但赋值仍需逐个进行:
// 拟定款项
projectPaymentItemPartialView.initialForm(result.data.projectPaymentItem);
initialForm: function (data) {
// 定金
$txtEarnestPromotionAmount_Edit.numberbox('setValue', data.earnestPromotionAmount);
$txtEarnestPromotionPercentage_Edit.numberbox('setValue', data.earnestPromotionPercentage);
// 工程款
$txtPaymentPercentageFirstPay_Edit.numberbox('setValue', data.paymentPercentageFirstPay);
$txtPaymentPercentageShuiDian_Edit.numberbox('setValue', data.paymentPercentageShuiDian);
$txtPaymentPercentageWaGong_Edit.numberbox('setValue', data.paymentPercentageWaGong);
$txtPaymentPercentageMuGong_Edit.numberbox('setValue', data.paymentPercentageMuGong);
$txtPaymentPercentageYouQi_Edit.numberbox('setValue', data.paymentPercentageYouQi);
$txtPaymentPercentageFinalPay_Edit.numberbox('setValue', data.paymentPercentageFinalPay);
// 额外款项
$txtExtraAmount_Edit.numberbox('setValue', data.extraAmount);
}
Spring MVC Ajax 嵌套表单数据的提交的更多相关文章
- spring mvc ajax异步文件的上传和普通文件上传
表单提交方式文件上传和ajax异步文件上传 一:首先是我在spring mvc下的表单提交方式上传 ssm的包配置我就不一一详细列出来了,但是上传的包我还是列出来 这一段我也不知道怎么给大家讲解就是直 ...
- Spring MVC(十)--通过表单序列化传递参数
通过表单序列化传递参数就是将表单数据转化成字符串传递到后台,序列化之后参数请求变成这种模式param1=value1&¶m2=value2,下面用代码实现. 1.创建表单 &l ...
- Spring MVC+ajax进行信息验证
本文是一个ajax结合Spring MVC使用的入门,首先我们来了解一下什么是Ajax AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX 最大的优点是在不重新加载整个页面的情况下,可 ...
- spring mvc ajax 提交复杂数组类型
The server refused this request because the request entity is in a format not supported by the reque ...
- Spring MVC实现防止表单重复提交(转)
Spring MVC拦截器+注解方式实现防止表单重复提交
- Spring学习笔记2——表单数据验证、文件上传
在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...
- 关于Spring MVC中的表单标签库的使用
普通的MVC设计模式中M代表模型层,V代表视图层,C代表控制器,SpringMVC是一个典型的MVC设置模式的框架,对于视图和控制器的优化很多,其中就有与控制器相结合的JSP的表单标签库. 我们先简单 ...
- spring mvc helloworld 和表单功能、页面重定向
Spring MVC Hello World 例子 这里有个很好的教程:https://www.cnblogs.com/wormday/p/8435617.html 下面的例子说明了如何使用 Spri ...
- spring mvc ajax请求
jar包中增加 jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar springmvx.xm ...
随机推荐
- 微软为啥让免费升Win10?
今天终于赶在截止日期之前把我的联想PC升到win10.微软这次对中国开放的持续一年的免费升级活动主要有两个原因.首先当然是"感恩Windows用户长久支持的回馈".微 ...
- python--对于装饰器的理解
1.首先,有个原来写好的函数,完成一定的功能,比如下面的,就打印一句话(某程序被调用).简单点,容易帮我们想清楚程序是怎么执行的. ''' 原函数 ''' def fun1(): print(&quo ...
- FileInputStream 小Demo
要求:设计如下界面 文本框里面可以输入的路径和文件名 单机按钮可以读取在 指定的文件 并把文件内容显示到一个文本域里面来 代码: /** * */ package com.niit.homewo ...
- Beta阶段项目复审
复审人:王李焕 六指神功:http://www.cnblogs.com/teamworkers/ wt.dll:http://www.cnblogs.com/TeamOf/ 六个核桃:http://w ...
- Swing-JComboBox用法-入门
JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...
- 201521123010 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 ①List中指定元素的删除(题目4-1) 1.1 实验总结 A: 这道题是老 ...
- 201521123007《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.1有关继承的知识点: 1.2有关多态 多态性:相同的形态,不同的行为.体现在相同的方法名 ...
- 201521123060《Java程序设计》第1周学习总结
1. 本章学习总结 认识和了解了Java的发展进程: 了解了相关开发工具: 认识了JVM,JRE,JDK: 2. 书面作业 Q1.为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用 ...
- 201521123048 《java程序设计》 第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1. ...
- 201521123039 《java程序设计》第一周学习总结
#1.本章学习总结 Java是面向对象的程序语言,它一切定义都是对象.我们所编写的Java程序经过编译后生成了*.class的文件,再经过JVM对*.class解释运行就可以得到Java程序,所以Ja ...