工作中的技术总结_ form表单的前后台交互 _20210825

在项目经常会使用 form 表单 进行数据的 页面展示 以及数据的 提交和后台处理

1、数据是怎么从后台传递到前台的
model.addAttribute("patternFileInfoForm", patternFileInfoFormOld);
return "patternfile/addsub";
// 在这个项目中 一般是通过 model 传递到前台 前台通过路径访问 controller层方法 数据经过处理 最后将 数据对象 保存到 model的 一个命名空间里面
2、前台的获取和处理
<form class="form-horizontal"
th:action="@{/pattern-file/save}"
th:object="${patternFileInfoForm}"
id="addForm" method="post" enctype="multipart/form-data">
<table class="table table-condensed table-bordered table-striped" id="table">
<tr>
<td style="background: #000; color: #FFF" class="p-1 white-space-nowrap sticky-cell">测定器种类*</td>
<td style="background-color: #D0D0D0;">
<div style="width: 40%">
<select class="for-select2" name="equipmentType" id="equipmentType" placeholder="测定器种类的选择" style="width: 100%">
<option value=""></option>
<option th:each="equipmentType : ${equipmentTypeList}"
th:value="${equipmentType}"
th:text="${equipmentType}"
th:selected="${equipmentType}== ${patternFileInfoForm.equipmentType}">
</option>
</select>
</div>
</td>
</tr> <tr>
<td style="background: #000; color: #FFF" class="p-1 white-space-nowrap sticky-cell">测定器*</td>
<td style="background-color: #D0D0D0;">
<div style="width: 40%">
<select class="for-select2" name="equipmentName" id="equipmentName" placeholder="测定器的选择" style="width: 100%">
<option value=""></option>
</select>
</div>
</td>
</tr> <tr>
<td style="background: #000; color: #FFF" class="p-1 white-space-nowrap sticky-cell">模式区分*</td>
<td style="background-color: #D0D0D0;">
<div style="width: 40%">
<select class="for-select2" name="patternFileTypeName" id="patternFileTypeName" placeholder="模式区分的选择" style="width: 100%">
<option value=""></option>
</select>
</div>
</td>
</tr> <tr>
<td style="background: #000; color: #FFF"
class="p-1 white-space-nowrap sticky-cell">模式文件*</td>
<td style="background:#D0D0D0">
<div id="patternFileUpload" class="uploadFile" data-type="single" data-code="MM060" style="width:300px;" th:with="files=*{fileName}, fieldName='fileName', tempFiles=*{patternFileNameValue}, tempFieldName='patternFileNameValue'">
<div th:replace="common/upload :: uploadFragment"></div>
</div>
</td>
</tr>
<tr>
<td style="background: #000; color: #FFF"
class="p-1 white-space-nowrap sticky-cell">评论</td>
<td style="background-color: #D0D0D0;">
<input class="form-control" id="patternFileComment" th:field="${patternFileInfoForm.patternFileComment}"></td>
</tr>
</table>
<input type="hidden" id="successMessage" th:value="${successMessage}" />
<input type="hidden" id="status" th:value="${status}" />
<input type="hidden" id="patternVersionErr" th:value="${patternVersionErr}" />
<input type="hidden" id="checkMode" name="checkMode" />
</form>

这个 form 是通过 thymeleaf 来绑定对象并进行渲染 ,其中有多个隐藏域 用于对值的提交或者一些状态的获取

3、前台获取的数据如何提交到后台
$("#updateButton").click(
function () {
var l = Ladda.create(this);
Common.showConfirm('confirm', '确认保存',
'即将保存画面中的内容。是否确认完成?', function () {
$("#patternFileComment").removeClass("is-invalid");
if ($("#patternFileComment").val().trim() == "" && $("#patternFileComment").val().length > 0) {
$("#patternFileComment").addClass("is-invalid");
Common.showConfirm('error', '出错', Common.message.COMMON044, null, null);
return;
}
if (patternFileCommentOld !== null && patternFileCommentOld !== $("#patternFileComment").val()) {
$("#historyPatternFileCommentValue").val(patternFileCommentOld)
}
l.start();
$("#checkMode").val("check");
$("#updateForm").submit();
}, null);
})

这是一段 js 代码主要是点击按钮进行提交的操作 $("#updateForm").submit(); 就是一个提交函数,将 表单信息提交到后台 后台controller通过 指定类型对象的参数进行接收,以及验证等等操作:

4、后台的获取
@RequestMapping(value = {"/update"}, method = {RequestMethod.POST})
public String update(
@Validated(value = PatternFileInfoForm.Update.class) @ModelAttribute PatternFileInfoForm patternFileInfoForm,
BindingResult bindingResult,
RedirectAttributes redirectAttributes,
Model model,
Principal principal,
HttpServletRequest request)

@ModelAttribute PatternFileInfoForm patternFileInfoForm 就是接收参数 这里定义了类型 和 参数名 @ModelAttribute (包路径:org.springframework.web.bind.annotation.ModelAttribute;) 是接收model参数的 注解

@Validated(value = PatternFileInfoForm.Update.class) @Validated (包路径:org.springframework.validation.annotation.Validated;)是用于数据验证的,参数是验证的规则 这里是一个在数据进行更新时使用的验证规则,可以检查数据在更新时 必填项是否填写

工作中的技术总结_ form表单的前后台交互 _20210825的更多相关文章

  1. SpringMVC中使用bean来接收form表单提交的参数时的注意点

    这是前辈们对于SpringMVC接收表单数据记录下来的总结经验: SpringMVC接收页面表单参数 springmvc请求参数获取的几种方法 下面是我自己在使用时发现的,前辈们没有记录的细节和注意点 ...

  2. Django中三种方式写form表单

    除了在html中自己手写form表单外,django还可以通过 继承django.forms.Form 或django.forms.ModelForm两个类来自动生成form表单,下面依次利用三种方式 ...

  3. JavaScript---网络编程(12)--DHTML技术演示(5)-form表单验证技术(正则)

    这里不进行很复杂的后台验证以及JavaScript的正则表达式,只是简单的介绍下这个技术,简单的后台接收与跳转,大概了解怎么验证的就可以.具体的技术,我后面还会继续写博客的.本人也还在学习中. 表单验 ...

  4. springMVC+thymeleaf form表单提交前后台数据传递

    后端: @RequestMapping(value = "/add", method=RequestMethod.POST) public String save(@ModelAt ...

  5. 【django之form表单】

    一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...

  6. 直接提交一个form表单后台返回一个新页面通过target属性可以放到iframe当中

    问题描述: 我想提交一个form表单后台直接返回一个新页面,但是当前页面还不想被替换掉: 解决方案: 在页面中添加一个iframe将form表单的target属性设置为iframe的id这样的话返回的 ...

  7. 使用隐藏form表单下载文件,解决url方式下载,由于环境问题而限制url长度,满足不了所有的需求!

    一 对于某些环境导出是直接用wiondow.href=url直接导出下载,有些业务需求,如员工档案等字段比较多的时候,全选导出就会引发异常,由于Nginx转发长度限制的问题, 如果运维不愿意改变环境, ...

  8. form表单上传文件

    一.formData()直接获取form表单数据 例子:获取form表单的id给formData(),然后传给后台. 要求: 传入值的name值必须与后台接受的name相对应. form表单不能嵌套, ...

  9. Form表单元素

    Form表单元素 action method input: name value type: text password button radio checkbox file submit reset ...

  10. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

随机推荐

  1. Java实现微信登录(网页授权)

    1.背景 实际开发中,使用第三方登录是非常常见的业务... 这样可以大提高用户体验,没必要一来就要注册,或者登录之类的... 并且开发一个登录或者注册严格来说也是非常麻烦的(各种防止攻击.机器操作等) ...

  2. 知攻善防Web1应急靶机笔记--详解

    知攻善防Web1应急靶机笔记 概述 这是一台知攻善防实验室的应急响应靶机,方便大家练习一下应急响应的流程和操作. 靶机的前景概述: 前景需要: 小李在值守的过程中,发现有CPU占用飙升,出于胆子小,就 ...

  3. 解锁强强组合: 使用 Kafka + ClickHouse 快速搭建流数据实时处理平台(DoubleCloud 博客)

    我们想要解决的问题 让我们深入一个现实场景: 设想你负责汇总多个销售点系统产生的大量数据.这些数据需要被实时处理并在高级分析仪表板上展示,以提供全面的洞察. 在数据处理领域,速度至关重要.ClickH ...

  4. 出海浪头之上,共探CDN进化新支力

    CDN技术自问世以来已超过20个年头,在云计算与AI深度融合的大趋势下,各行业实际业务需求已发生巨变,下一代CDN技术又将走向何方?8月16日,"抓住泛娱热趋,打通增长脉络--大浪淘沙之后的 ...

  5. python pyqt6 QMainWindow 使用QComboBox 窗口移位

    QMainWindow 可拖拽移动,但是点击QComboBox  时,窗口有时会误识别为拖拽移动,导致窗口自动移动位置 在QMainWindow中,新增事件筛选器 # 避免点击QComboBox时,窗 ...

  6. 使用kamailio进行分机注册及互拨

    操作系统版本:Debian 12.5_x64 kamailio版本:5.8.2 kamailio作为专业的SIP服务器,可承担注册服务器的角色.今天记录下kamailio作为注册服务器,承接分机注册, ...

  7. Redis过期策略以及Redis的内存淘汰机制

    此篇介绍了Redis过期策略以及Redis的内存淘汰机制,从内存淘汰的8种策略,如何开启内存淘汰策略到如何选择合适的淘汰策略,对Redis的内存淘汰机制做了全方位的阐述 如何高效的使用内存对于redi ...

  8. SQL Server STRING_AGG

    参考: How To Use STRING_AGG – Concat Multiple Row Values In SQL Server 如果你想做 string.join(',', collecti ...

  9. QT疑难杂症之QML程序中如何使用文件系统模型QFileSystemModel?

    简介 本文介绍了 QML程序中如何使用树状控件TreeView展示QT文件系统模型QFileSystemModel中的数据,并给出了两种实现模式. 目录 QML程序中使用文件系统模型的代码 树状控件自 ...

  10. 均值回归策略在A股ETF市场获利的可能性

    如何在股票市场获利 曾经有人告诉我一个在股票市场赚钱的秘诀,只要掌握这个秘诀,赚钱就像捡钱一样容易.他说:这个秘诀其实很简单,就是在股票价格低的时候买入,在价格高的时候卖出. 啧啧,不愧是秘诀,明明是 ...