谈谈如何防止表单重复提交

防止表单重复提交是我们在实际开发中经常需要考虑的事情,很多时候,我们可能在页面去做:当提交表单时,将按钮置为disabled,当获取到返回结果后将disabled去掉,这样保证当返回结果之前都无法再次发送请求。但是,很明显,只在前端做处理远远不够都,本文我们探讨都主要还是在后端做逻辑处理。 场景一 简单都防止手抖双击(连击)用户’手抖’是常见不过的事情,手快也好,鼠标敏感也好,着急提交连续点击鼠标也罢,总的来说,这样的情况下,用户就会出现多次提交表单。造成的现象就是:假设提交报销申请,那么就会出现两单(或多单)内容完全一样的报销申请,很明显,这是不对的。 这里又分两种情况: 1、第一次请求结果还没有返回又发起第二次请求前面介绍了,这种情况也可在前端处理,当然,我们在后端也得做逻辑判断...

Continue Reading →

Java Web项目全局异常捕获实现

Java Web项目,有时候系统会抛异常,或者说我们对各种数据进行校验抛异常,而这些异常我们是不能直接抛到页面的,应该以Restful形式正常返回,并且把异常信息也带出来,交给前端提示。 如果每个接口都要做异常捕获非常的繁琐和重复,我们应该统一去处理程序中的异常。 实现步骤1、定义异常类我们首先定义业务需要的异常类,比如ParamException表示参数校验有误的异常,AuthException表示认证异常等,最好是RuntimeException,这样就不需要显示去捕获了。 2、实现GlobalExceptionResolver类public class GlobalExceptionResolver implements HandlerExceptionResolver{ ...

Continue Reading →

dataTables.bootstrap.js+PageHelper实现后端分页

如果是做一些管理系统,分页是最常见的场景,本文指导如何使用前端的dataTables.bootstrap.js插件和后端的PageHelper分页插件实现后端分页。 技术栈: 服务端使用SpringBoot开发 使用Mybatis作为ORM框架 使用PageHelper作为后端分页插件 使用Bootstrap作为前端UI框架 使用dataTables.bootstrap.js作为前端分页插件 我们需要实现一个展示用户操作日志的分页列表。 后端数据实现首先,我们实现根据条件全量查询日志列表 List<UserLog> listUserLog(Integer userId,Integer type); @Override public List<UserL...

Continue Reading →

Myabtis批量插入返回自增主键

Myabtis是当前使用最广泛的ORM框架,简单方便,但是当我们需要使用批量插入,并且需要获取到自增ID的时候,发现,貌似遇到了问题。 经过几番实验,终于成功了,在此记录分享给大家。 为了方便实验,我们先建一个表: CREATE TABLE `k_student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `age` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 Java Bean public class Studen...

Continue Reading →

捕获反射执行方法抛出的异常

我们在使用反射调用方法时候,只能捕获到反射抛出的异常,如果是被执行的方法抛出的异常又该如何捕获呢? try { Object result = method.invoke(instance, param.toString()); return result; } catch (Exception e) { e.printStackTrace(); } 如果invoke()方法抛出异常,上面代码是可以捕获,可是如果是Method对应的方法异常怎么办呢? try { Object result = method.invoke(instance, param.toString()); return RestResu...

Continue Reading →

使用Velocity模板作为导出PDF的模板

工作中经常需要导出PDF,如果在Java代码中生成HTML代码,需要进行各种字符串拼接,相当的蛋疼,后来发现Velocity可以很好的起到模板的作用。使用Velocity作为模板写好HTML,我们只需要传我们的对数对象到模板即可渲染我们预期的HTML,然后将该内容生成PDF,简单便捷,更重要的是没了讨厌的HTML字符串拼接的过程。 1、写好Velocity模板我们新建一个模板文件,比如xx.vm,里面就是HTML内容,使用Velocity语法直接使用传入的对象数据。 <html> <head> <meta htp-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <st...

Continue Reading →

SpringBoot集成Thymeleaf

Thymeleaf作为SpringBoot官方推荐的模板方案,下面我们来将SpringBoot项目集成Thymeleaf。 添加Thymeleaf依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 编写代码在resources目录有static和templates两个目录: static 静态文件存放目录,比如css、js、image或者前端库文件等。 templa...

Continue Reading →

SpringBoot集成RabbitMQ

使用Docker起RabbitMQ服务# 拉取镜像 docker pull rabbitmq # 启动服务 sudo docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 rabbitmq # 进入docker sudo docker exec -it rabbit bash # 添加用户和授权 rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" 添加依赖<dependency> ...

Continue Reading →

© 2019 FunGa技术札记 All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero