概述

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

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

实体类的设计

在设计实体类时最好的方式是“主模块包括了自己的字段,而子模块只通过一个属性被引用过来”,如下(以下字段都省略了 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. 微软为啥让免费升Win10?

           今天终于赶在截止日期之前把我的联想PC升到win10.微软这次对中国开放的持续一年的免费升级活动主要有两个原因.首先当然是"感恩Windows用户长久支持的回馈".微 ...

  2. python--对于装饰器的理解

    1.首先,有个原来写好的函数,完成一定的功能,比如下面的,就打印一句话(某程序被调用).简单点,容易帮我们想清楚程序是怎么执行的. ''' 原函数 ''' def fun1(): print(&quo ...

  3. FileInputStream 小Demo

    要求:设计如下界面  文本框里面可以输入的路径和文件名  单机按钮可以读取在 指定的文件  并把文件内容显示到一个文本域里面来 代码: /** * */ package com.niit.homewo ...

  4. Beta阶段项目复审

    复审人:王李焕 六指神功:http://www.cnblogs.com/teamworkers/ wt.dll:http://www.cnblogs.com/TeamOf/ 六个核桃:http://w ...

  5. Swing-JComboBox用法-入门

    JComboBox是Swing中的下拉菜单控件.它永远只能选中一个项目,然而比单选按钮节省空间.如果使用setEditable设置为true则内部选项的文本可以编辑,因此这种组件被称为组合框.注意,对 ...

  6. 201521123010 《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 ①List中指定元素的删除(题目4-1) 1.1 实验总结 A: 这道题是老 ...

  7. 201521123007《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.1有关继承的知识点: 1.2有关多态 多态性:相同的形态,不同的行为.体现在相同的方法名 ...

  8. 201521123060《Java程序设计》第1周学习总结

    1. 本章学习总结 认识和了解了Java的发展进程: 了解了相关开发工具: 认识了JVM,JRE,JDK: 2. 书面作业 Q1.为什么java程序可以跨平台运行?执行java程序的步骤是什么?(请用 ...

  9. 201521123048 《java程序设计》 第11周学习总结

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

  10. 201521123039 《java程序设计》第一周学习总结

    #1.本章学习总结 Java是面向对象的程序语言,它一切定义都是对象.我们所编写的Java程序经过编译后生成了*.class的文件,再经过JVM对*.class解释运行就可以得到Java程序,所以Ja ...