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 ...
随机推荐
- python re group()
python group() 正则表达式中,group()用来提出分组截获的字符串,()用来分组 import re a = "123abc456" print re.search ...
- 怎么修改mysql中user表的密码????
- 如何使用Git和码云Git@OSC
1.Git简介 关于Git是什么,阅读博客Git简介 2.Git 基础 Git命令很多,常用命令如下图 Workspace:工作区 Index/Stage :暂存区 Local Repository: ...
- 201521123082 《Java程序设计》第7周学习总结
201521123082 <Java程序设计>第7周学习总结 标签(空格分隔): Java 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ...
- 201521123065 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 1.ArrayList只能存放对象: 2.对象包装类之间使用equals进行比较 ...
- 201521123025<<java程序设计>>第9周学习总结
1. 本周学习总结 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现Array ...
- 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法
在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...
- Activiti-03-query api
Query API 有两种方式从引擎中查询数据, 查询 API 和本地查询. API方式: List<Task> tasks = taskService.createTaskQuery ...
- BlockingQueue<> 队列的作用
BlockingQueue<> 队列的作用 BlockingQueue 实现主要用于生产者-使用者队列 BlockingQueue 实现主要用于生产者-使用者队列,BlockingQueu ...
- jz2440重新分区
在购买开发板的时候,板子上已经烧写好了bootloader.内核和文件系统.但是在具体使用时,发现板子上划分的内核分区只有2M,但是我编译出来的内核大于2M,于是将内核烧写到nandflash上面时会 ...