shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...
一般情况下,对表格中的数据进行“增删改”操作,都是直接操作数据库。现在有些项目因为设计或者优化的缘故,不对表格中的数据进行“增删改”,而是通过最后“保存”按钮的操作,一次性将数据传至服务器,由服务器对数据进行“增删改”。
以下通过给用户分配角色这样的功能进行说明。
操作界面大致如下(直接手画,略显粗糙,能看明白就行):

说明:
- “新增”、“修改”和“删除”都不是直接操作数据库。
- 点击“保存”时才将数据传给服务器。
- 此项目中的删除均为逻辑删除(即,只是对数据打上“删除”状态的标记),不是物理删除。
- 文中说的“ID”为用户角色的主键。
第一种方法:先删后增
- 直接删除用户下的所有角色,将前端传过来的数据统一新增。
优缺点:
- 优点:逻辑简单,容易实现。
- 缺点:会产生大量的删除数据。
第二种方法:通过有无 ID 进行操作判断
- 过滤数据:通过 stream 过滤出无 ID 的数据和有 ID 的数据。
- 新增:无 ID 的数据均为新增的数据,在服务器中直接对这些数据进行新增操作即可。
- 修改和删除:查询出用户所有的角色,将查询出来的ID(ID_A)与前端传过来的有ID的数据(ID_B)进行比对,交集(即 ID_A 与 ID_B都有的数据)即为修改,差集(即 ID_A 有的数据,在 ID_B 中没有)即为删除。
优缺点:
- 优点:影响的数据量较少
- 缺点:实现起来比较复杂
第三种方法:前端部分分类
- 前端分类:前端将被逻辑删除的数据保存在 delete 对象中。
- 数据上传:将表格中的数据(包含有新增的数据和修改的数据)和 delete 对象中的数据一起上传至服务器。
- 后端分类:将表格中的数据分为有 ID 的数据和无 ID 的数据。
- 增删改操作:无 ID 的数据进行新增,有 ID 的数据进行修改,delete 对象中的数据进行删除。
优缺点:
- 优点:影响的数据量较少,前端的分类操作比较容易,后端的分类操作和增删改操作也比较容易。
- 缺点:后端仍需要进行分类操作。
第四种方法:前端全分类
- 前端分类:前端将需要进行新增、修改和删除的数据分别放到 add 对象、update 对象 和 delete 对象中。
- 数据上传:将分类之后的数据上传至服务器。
- 后端增删改操作:对 add 对象中的数据进行新增,对 update 对象中的数据进行修改,对 delete 对象中的数据进行删除。
优缺点:
- 优点:影响的数据量较少,后端容易实现。
- 缺点:前端实现较难。
相关文章:

在网络通讯中,如何自己分配可用的端口号和获取自己的ip地址
在编写一些程序时,为了程序可以在其他电脑上也可以使用,而不用手动去更改ip,或者碰到端口不可用的情况。在这里找到了一个好的方法,实际使用也没有问题!故此推荐给大家! 方案: 在构建网络时,使用࿱…

【翻译】ASP.NET WEB API异常处理
当一个web api抛出一个异常后 此异常会被转化成一个HTTP响应 错误代码为500的服务错误 但是如果你不想让客户端看到500的错误码 你也可以自定义错误码 如下代码当用户输入的ID没有与之相关的数据 则返回了错误码为404的错误 (页面未找到) public Product…

hook NtTerminateProcess进行应用的保护
这段时间在学习驱动,然后看到hook ssdt的代码,找了一个写的清晰的学习了一下:http://www.netfairy.net/?post218 这里是hook NtOpenProcess,但是想自己练手所以hook NtTerminateProcess,经过多次蓝屏后,然…

linux系统 长久记录所有用户所有操作记录
在linux系统中想要记录所有登录过当前系统的用户操作,排查有人对当前系统做的何种操作导致系统问题,可以按照如下方法进行。 前言 在描述操作步骤之前,先说一下系统环境变量的相关配置文件 ~/.bashrc和~/.bash_file,这两个文件…

jquery图片播放切换插件
点击这里查看效果可自定义数字样式和左右点击按钮这个更好:移入按钮切换版本更多图片轮播以下是HTML文件代码: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transiti…

安卓饼状图设置软件_话单及银行卡交易智能分析软件
一、产品概况: 思迈奥SMILE数据智能分析软件是由我司自主设计与研发的一款结合在公安和检察院的侦查业务经验而定制研发的数据智能分析系统,包含于话单、电子银行账单、及其它数据(个人出行数据、社会资源数据、微信数据及其它聊天数据)等的数据导入、检…

跨区域MPLS TE
拓扑: R1配置: mpls label range 100 199 mpls traffic-eng tunnels interface Loopback0 ip address 192.168.1.1 255.255.255.255 ! interface Tunnel1 ip unnumbered Loopback0 tunnel mode mpls traffic-eng tunnel destination 192.168.1.4 tunnel …

C++智能指针: shared_ptr 实现详解
文章目录shared_ptr描述声明作用原理实现函数使用关于shared_ptr循环引用问题shared_ptr描述 声明 shared_ptr属于C11特性中新加的一种智能指针,它的实现方式是模版类,头文件<memory> template <class T> class shared_ptr 所以使用shared…

linux文本处理常用命令
linux文本处理常用命令 linux文本处理命令:grep、sed、printf、awk 1.grep grep的作用是按行查找字符,输出包含字符的行。 #从文件查询 grep hello filename.txt #从管道的输入查询 cat filename.txt|grep hello grep使用示例: grep的查找主要…

arduino 控制无刷电机_智能控制轮椅来了,残疾人的福音!
传统的轮椅已被证明是非常宝贵的工具,为残疾人提供了很多便利,但其只能限制坐在一个位置。外国的一个研究团队通过开发一个功能强大的多功能轮椅,使用户能够通过手机应用程序轻松地在各种各样的位置之间进行切换。(图片来自 IC photo)这是一种…

python科学计算整理
网站: http://bokeh.pydata.org/gallery.html 转载于:https://www.cnblogs.com/gogly/p/3453341.html
TP-link 841N 刷DD-WRT固件
2012年4月20号 今天,笔者逛“太平洋”的时候,发现了一个关于TP-Link 840N刷DD-WRT的帖子,进去逛了一会,突然记得自己家中的那个路由好像也是这个型号的,二话不说,果断收录这条资料,并把所需要的…

网格的铺设问题——骨牌
Problem Description 有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。 Input 输入的第一行包含一个正整数T(T<20),表示一共有 T…

C++智能指针:weak_ptr实现详解
文章目录weak_ptr描述声明作用原理实现函数成员使用总结weak_ptr描述 声明 头文件:<memory> 模版类:template <class T> class weak_ptr 声明方式:std::weak_ptr<type_id> statement 作用 根据boost库的官方描述&#…

在PHP中使用全局变量的几种方法
简介即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的。一些常见的全局数据有:程序设定类、数据库连接类、用户资料等等。有很多方法能够使这些数据成为全局数据,其中最常…

python处在哪个阶段_python 基础复习
1、简述cpu、内存、硬盘的作用cpu(1)cpu:处理逻辑运算、算术运算(2)cpu:接受指令传给电脑硬件,让其运行内存:(1)内存:从硬盘中读取数据,供其cpu调取指令运行,短暂的存贮数据;运行速度…

android用户界面之WebView教程实例汇总
一、WebView教程1.Android---UI篇---WebView(网络视图)http://www.apkbus.com/android-14259-1-1.html2.webview学习记录http://www.apkbus.com/android-44567-1-1.html3.Android中使用WebView, WebChromeClient和WebViewClient加载网页http://www.apkbu…

java下输出中文的一点研究
网上或者大部分书上都说Java中输出中文使用FileReader类就可以了,但是当你读取一个中文文档时,你会发现,除了乱码,还是乱码。究其原因,这其实是文件流读取时使用的编码方式和文件本身编码方式不同,造成读取出来文件乱码…

C++智能指针:unique_ptr详解
文章目录unique_ptr描述声明作用函数指针描述总结unique_ptr描述 声明 头文件:<memory> 模版类: 默认类型template <class T, class D default_delete<T>> class unique_ptr数组类型template <class T, class D> class uniq…

川崎机器人示教盒维修_专业维修丹阳市KUKA库卡KRC2库卡C4主板维修{苏州罗韦维修}...
发那科机器人故障分析 发那科伺服放大器上LED指示灯故障维修大全_发那科机器人维修,FANUC机器人保养,伺服电机示教器减速器维修,驱动器维修,苏州发那科机器人维修,本文主要介绍了发那科伺服放大器上因故障而出现的各种…

js 文本反向排列显示
一次面试遇到这样的题目 反向输出“how are you” 解决方法 <script language"JavaScript">var message1"how are you";var message2"";for (countmessage1.length; count > 0; count--)message2message1.substring(count,count-1);doc…

2012年12月4期手机网页开发
最近主要做手机上页面的开发,主要框架是,手机安装客户端,加载主站手机应用页面,手机客户端配合主站功能实现本地扫描或重力感应的效果。 针对安卓系统,在开发和调试时发现如下问题:1路径错误&#…

zabbix4.0构建实录
【Nginx】 #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [rootcentos ~]# yum -y install zlib pcre pcre-devel openssl openssl-devel[rootcentos ~]# useradd -s /sbin/nologin nginx [rootzabbix-server ~]# yum install -y nginx 【M…

ceph-kvstore-tool 工具使用详解
文章目录简介使用总结简介 ceph-kvstore-tool工具是用来获取存放在leveldb或者rocksdb数据库中的键值元数据。并且该工具能够对kvstore中的数据进行配置,就像是对离线后的osd操作osd map一样 使用该工具,需要安装ceph-test-12.2.1.06-0.el7.centos.x86_…

springboot 订单重复提交_Spring Boot (一) 校验表单重复提交
一、前言在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据。存在如上问题可以交给前端解决,判断多长时间内不能再次点击保存按钮&a…

智能会议白板系统每日开发记录
智能会议白板系统,在开发过程中,整个项目期限内,每月,每周,每天要做的事情,作为组长的记录,多有不足之处,望指点。 转载于:https://www.cnblogs.com/mayijun/p/3458039.html

java.lang.OutOfMemoryError: PermGen space及其解决方法
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入Per…

ceph-dencoder工具使用详解
文章目录简介使用decode命令用法encode简介 ceph-dencoder工具是一个序列化编码、解码并且打印ceph数据结构的工具。它主要用来调试和测试ceph不同版本之间的兼容性问题 该工具是由 ceph-common-12.2.1.06-0.el7.centos.x86_64 rpm包生成 本文章是根据ceph-12.2.1版本来描述改…

EBS fnd_global.apps_initialize
原型:fnd_global.apps_initialize(user_ID, Responsibility_id,Responsibility_application_id);作用:在数据库的会话中设置全局变量,和用户概要信息。参数获得:参数一,用户ID select user_idfrom fnd_userwhere user_…

js判断鼠标靠近屏幕最侧面的监听_threejs按鼠标位置缩放场景
threejs的orbitcontrol,默认的缩放模式为整体以target为中心进行缩放。有时候,我们想让场景按照鼠标位置进行缩放,体验起来就和地图的缩放一样,最直观的感觉就是整个场景会越来越靠近鼠标点的位置,而不是整体的缩放大小…