概述

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

在这种情况下该怎么去设计实体类以及表单呢?

实体类的设计

在设计实体类时最好的方式是“主模块包括了自己的字段,而子模块只通过一个属性被引用过来”,如下(以下字段都省略了 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 嵌套表单数据的提交的更多相关文章

  1. spring mvc ajax异步文件的上传和普通文件上传

    表单提交方式文件上传和ajax异步文件上传 一:首先是我在spring mvc下的表单提交方式上传 ssm的包配置我就不一一详细列出来了,但是上传的包我还是列出来 这一段我也不知道怎么给大家讲解就是直 ...

  2. Spring MVC(十)--通过表单序列化传递参数

    通过表单序列化传递参数就是将表单数据转化成字符串传递到后台,序列化之后参数请求变成这种模式param1=value1&&param2=value2,下面用代码实现. 1.创建表单 &l ...

  3. Spring MVC+ajax进行信息验证

    本文是一个ajax结合Spring MVC使用的入门,首先我们来了解一下什么是Ajax AJAX 不是新的编程语言,而是一种使用现有标准的新方法.AJAX 最大的优点是在不重新加载整个页面的情况下,可 ...

  4. spring mvc ajax 提交复杂数组类型

    The server refused this request because the request entity is in a format not supported by the reque ...

  5. Spring MVC实现防止表单重复提交(转)

    Spring MVC拦截器+注解方式实现防止表单重复提交  

  6. Spring学习笔记2——表单数据验证、文件上传

    在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...

  7. 关于Spring MVC中的表单标签库的使用

    普通的MVC设计模式中M代表模型层,V代表视图层,C代表控制器,SpringMVC是一个典型的MVC设置模式的框架,对于视图和控制器的优化很多,其中就有与控制器相结合的JSP的表单标签库. 我们先简单 ...

  8. spring mvc helloworld 和表单功能、页面重定向

    Spring MVC Hello World 例子 这里有个很好的教程:https://www.cnblogs.com/wormday/p/8435617.html 下面的例子说明了如何使用 Spri ...

  9. spring mvc ajax请求

    jar包中增加 jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar springmvx.xm ...

随机推荐

  1. PHP(函数)

    <script> // 获得日 var time = new Date(); var x = time.getDate(); document.write(x+"日," ...

  2. 对eigrp默认网络的理解!

    EIGRP 默认网络设置的个人总结 (了解即可) //该机制同rip和ospf的default-informationoriginate,原理相同,只是配置格式不同. //!!(唯一作用)该命令起到减 ...

  3. css预处理器less和scss之less介绍(一)

    第一次发的标题有误,重发一遍,抱歉了 一.less基础语法 1.声明变量:@变量名:变量值 使用变量:@变量名 例如 @color : #ff0000; @length : 100px; #div1{ ...

  4. 2016-2017-2 《Java 程序设计》课堂实践项目

    目录 基本工具 基础内容 Hello World 和 模块分解 数组的使用 命令行参数 递归 分支语句 String类的使用 类的定义与测试 多态 IO与异常 数据库 网络与安全 数据结构应用 And ...

  5. 201521123082 《Java程序设计》第9周学习总结

    201521123082 <Java程序设计>第9周学习总结 标签(空格分隔):java 1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 ...

  6. 201521123056 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 答: 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译 ...

  7. 201521123048 《Java程序设计》第2周学习总结

    本周学习总结 (1)String类数据类型 (2)枚举类型应用 (3)Java数组创建及使用 (4)进一步运用和了解码云 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...

  8. Java课程设计 ————五子棋 (个人博客)

    JAVA课程设计 五子棋(博客个人版) •团队课程设计博客链接 http://www.cnblogs.com/mz201521044152/p/7065575.html •个人负责模块或任务说明 1. ...

  9. JAVA课程设计-计算器(201521123028 李家俊)

    1.团队课程设计博客链接 http://www.cnblogs.com/DevilRay/p/7064482.html 2.个人负责模板或任务说明 主要负责计算器图形界面 包括操作按钮,菜单项以及输出 ...

  10. 201521123066 《Java程序设计》第十一周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synch ...