博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC Ajax 嵌套表单数据的提交
阅读量:6718 次
发布时间:2019-06-25

本文共 2960 字,大约阅读时间需要 9 分钟。

Markdown

概述

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

Markdown

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

实体类的设计

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

表单的设计

在子模块元素,可以考虑使用“.”(点)操作符。大概看看主表单和子表单的模样。

主表单:

    

子表单(内嵌于主表单之中):

    已交纳        元,优惠百分比:        %    
可抵消金额:
5000

可以看到,子模块的 name 属性值前面需要通过点间隔符来补充一个前缀:“projectPaymentItem”

经过 Ajax 提交后,服务端会以主子结构完好的承接客户端的数据。

Markdown

客户端的 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 只需按普通数据来提交即可。

看一下提交的数据:

Markdown

  • SpringMVC 控制器接收数据
// 暂存@RequestMapping(value = "/UpdateDesignApplyForAudit", method = RequestMethod.POST)@ResponseBodypublic TransactionResult UpdateDesignApplyForAudit(DesignApplyForAuditUpdate designApplyForAuditUpdate, @CookieValue(value = "base_cookieKey", required = false) CookieObject cookieObject) {    designApplyForAuditUpdate.setCookieObject(cookieObject);    TransactionResult result = null;}

designApplyForAuditUpdate 的值如下:

Markdown

最后提一下客户端针对子表单的赋值,尽管上述的取值很方便,但赋值仍需逐个进行:

// 拟定款项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);}

转载于:https://www.cnblogs.com/ramantic/p/7594830.html

你可能感兴趣的文章
给迷茫的JAVA员一些中肯建议, 你还在虚度光阴吗?
查看>>
计算机程序的思维逻辑 (40) - 剖析HashMap
查看>>
【腾讯 TMQ】从 0 到 1:打造移动端 H5 性能测试平台
查看>>
我是HDRoot!
查看>>
Postgres On Docker-窥探容器服务
查看>>
性能优化工具知识梳理(2) Systrace
查看>>
JS中的洋葱模型
查看>>
js call、apply、bind的实现
查看>>
《程序员的职业素养之代码整洁之道》成为专业人士必读
查看>>
使用IntelliJ Idea新建SpringBoot项目
查看>>
聊聊flink的Table API及SQL Programs
查看>>
Android M 封装过的运行时权限处理
查看>>
架构的演进,阿里资深Java工程师表述架构的腐化之谜
查看>>
DDGScreenShot —iOS 图片处理--多图片拼接 (swift)
查看>>
flutter 带未读消息的底部导航
查看>>
Protobuf 语言指南(proto3)
查看>>
你的目标,不要只是说说而已
查看>>
adb安装以及简单的操作
查看>>
前端项目部署
查看>>
JavaScript 工作原理之十五-类和继承及 Babel 和 TypeScript 代码转换探秘
查看>>