工作中的技术总结_ 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. 恭喜社区迎来新PMC成员!

    恭喜Apache SeaTunnel社区又迎来一位PMC Member@liugddx!在社区持续活跃的两年间,大家经常看到这位开源爱好者出现在社区的各种活动中,为项目和社区发展添砖加瓦.如今成为项目 ...

  2. 在线flex布局----自己写的一个flex布局的小玩意,需要的私聊加关注0.0

  3. armbian挂载sd卡记录

    mkdir -p /mnt/mmctouch  /etc/init.d/mount.shvim /etc/init.d/mount.sh内容见图mount /dev/mmcblk1p1 /mnt/mm ...

  4. NSmartProxy:一款.NET开源、跨平台的内网穿透工具

    前言 今天大姚给大家分享一款.NET开源.免费(MIT License).跨平台的内网穿透工具,采用.NET Core的全异步模式打造:NSmartProxy. 内网穿透工具介绍 内网穿透工具是一种能 ...

  5. TypeScript – Get Started Advanced (Work with SystemJS)

    更新 我本来想 skip 掉 bundler (webpack), 感觉单侧不需要搞那么复杂, 所以用了 TypeScript 自带的 bundle (outFile) + SystemJS. 谁知道 ...

  6. ASP.NET Core – Web API Versioning

    前言 项目持续维护, API 就需要版本控制. ASP.NET Core 有官方的插件专门处理 API 版本控制. 主要参考 Your Guide to REST API Versioning in ...

  7. 【学习笔记】数位DP

    数位DP 适用条件 此类题目一般要求在\([l,r]\)区间内满足条件的数的个数,答案一般与数的大小无关,而与数各位的组成有关.题目中给出的数的范围一般较大,往往在\(10^9\)以上因此无法暴力枚举 ...

  8. C++ const常量指针

    const常量指针 const是C++关键字,译为常量,const指针即为常量指针. 分为三类 指向const的指针 const指针 指向const的const指针 指向const的指针 表示指向区域 ...

  9. `std::future`--异步的优势

    std::future 相比于直接使用线程在 C++ 中有几个重要的优势,主要体现在同步结果获取.简化代码管理.以及更安全的异步任务管理等方面.以下是 std::future 的一些主要优势: 1. ...

  10. cf2009 Codeforces Round 971 (Div. 4)

    A. Minimize! 签到题.计算\((c-a)+(b-c)\)的最小值,其实值固定的,等于\(b-a\). int a, b; void solve() { cin >> a > ...