基于springboot和ajax的简单项目 06 日志界面的delete功能(根据选择的checkbox)

01.这次后台开始;
顺序依次是dao->xml->service->serviceimpl->controller->html

02.dao接口

public int doDeleteObjects(@Param("ids") Integer... ids);

03.xml文件

<update id="doDeleteObjects" >
        delete from sys_logs
        <choose>
        <when test="ids.length>0 and ids!=null">
            <where>
                    <foreach collection="ids"  separator="or" item="id">
                        id=#{id}
                    </foreach>
            </where>
        </when>
        <otherwise>
            where 1==2
        </otherwise>
        </choose>

    </update>

04.service接口

 public  int doDeleteObjects(@Param("ids")Integer... ids) ;

05.serviceimpl实现类

 @Override
    public int doDeleteObjects(Integer... ids) {
        if (ids.length==0||ids==null)
        {
        throw  new IllegalArgumentException("请选择一个");
        }
        int rows=0;
        try {
            rows=sysLogdao.doDeleteObjects(ids);
        }catch (Throwable e)
        {
            e.printStackTrace();
            throw new serivceException("系统在修复中");
        }
        if (rows==0)
        {
            throw new serivceException("数据不存在");
        }
        return rows;
    }

06.controller类

 @RequestMapping("doDeleteObjects")
    @ResponseBody
    public JsonResult doDeleteObjects(Integer...ids){
        int rows= syslogservice.doDeleteObjects(ids);
        return new JsonResult("OK");
    }

07.html文件

先在自动加载的函数中声明点击事件(delete功能)

$(".input-group-btn").on("click",".btn-delete",doDeleteObjects)

再去声明delete函数,使用的ajax的post方法。
其中的params是string类型的参数。





   function doDeleteObjects() {
	   var url="log/doDeleteObjects";
	   var ids=doGetCheckedIds();
	   if(ids.length==0){
		   alert("至少选择一个");
		   return;
	   }
	   var params={"ids":ids.toString()};
	   $.post(url,params,function (result) {
		   //请问result是一个字符串还是json格式的js对象?对象
		   if(result.state==1){
			   alert(result.message);
			   doGetObjects();
		   }else{
			   alert(result.message);
		   }
	   })

   }
   
   function doGetCheckedIds() {
	   //定义一个数组,用于存储选中的checkbox的id值
	   var array=[];//new Array();
	   //获取tbody中所有类型为checkbox的input元素
	   $("#tbodyId input[type=checkbox]").
			   //迭代这些元素,每发现一个元素都会执行如下回调函数
			   each(function(){
				   //假如此元素的checked属性的值为true
				   if($(this).prop("checked")){
					   /调用数组对象的push方法将选中对象的值存储到数组
					   array.push($(this).val());
				   }
			   });
	   return array;

   }

用到的html中的方法:

使用的each方法遍历,$(this)表示当前元素
在这里插入图片描述


使用prop获取当前的属性:checked是一个表单标签input中的属性,就叫做checked。

涉及到的html标签

<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'></td>

在这里插入图片描述
在这里插入图片描述
这个是单个选中后的功能

那全选的delete功能是如何实现的?

08.首先就是实现全选后所有的在那一页出现的checkbox都可以被选中。

先给全选按钮增加点击事件。由于是表单,而且需要的是01.全选后02.在按下delete按钮后才可以delete
这里使用的是change函数,不是click函数

(一般button用click点击事件,表单的input【type=checkbox】使用的是change事件)

$("#checkAll").change(doChangeTBodyCheckBoxState)

在这里插入图片描述

#checkAll是id属性是checkAll的一个input【type=checkbox】的标签,表示全选

通过prop来获取checked属性的值,而后把table中的input【type=checkbox】的标签的checked属性的值都改成真

jQuery中的prop函数的取值和赋值两种用法。

//修改tbody中checkbox对象状态
function doChangeTBodyCheckBoxState() {
   //1.获取当前点击对象的checked属性的值
   var theadCheckBoxState = $(this).prop("checked");
   //2.将tbody中所有checkbox元素的值都修改为checkall对应的值。
   $("#tbodyId input[type=checkbox]").prop("checked",theadCheckBoxState);

} 

那么,如果table中显示的某一行数据取消的选择,那么全选按钮应该不被勾选才对。
同样在table(id=tbodyId)的input【type=checkbox】有一个change事件
在自动加载函数中使用:

 $("#tbodyId").on("change",".cBox",doChangeTHeadCheckBoxState);
});
//修改thead中的checkbox对象的状态
function doChangeTHeadCheckBoxState() {
   //1.定义变量表示,默认值为true
   var flag=true;
   //2.获取所有的tbody中的checkbox对象的值,进行逻辑与操作
   $("#tbodyId input[type='checkbox']").each(function () {
      flag=flag&&$(this).prop("checked"); //true&&true/false
   })
   //3.修改thread中的checkbox对象状态
   $("#checkAll").prop("checked",flag);
}

更新页面后,全选按钮不选中:
这个功能要在更新table数据的函数中去添加:

$("#checkAll").prop("checked",false);

	function doGetObjects() {
		$("#checkAll").prop("checked",false);
        //发送json请求,接受数据
		//1.定义url和参数
		var pageCurrent=$("#pageId").data("pageCurrent");
		//为什么要执行如下语句的判定,然后初始化pageCurrent的值为1
		//pageCurrent参数在没有赋值的情况下,默认初始值应该为1.
		if(!pageCurrent) pageCurrent=1;
		var params={"pageCurrent":pageCurrent};//pageCurrent=2
		var username=$("#searchNameId").val();
		if(username) params.username=username;//查询时需要
		var url="log/doFindPageObjects";
		//2.发起异步请求,getjson方法
		$.getJSON(url,params,function (result) {
			//请问result是一个字符串还是json格式的js对象?对象
		console.log(result);
		dohandlerresult(result);
		})

	}

09.调试bug,如果在最后一页使用全选delete功能的时候,pageCurrent的值不能像往常一样,从后+1更新table中的数据,而是需要-1,向前去更新数据。

  function doRefreshAfterDeleteOK(){
	   var pageall=$("#pageId").data("pageall");
	   var pageCurrent=$("#pageId").data("pageCurrent");
	   var checked=$("#checkAll").prop("checked");
	   if(pageCurrent==pageall&&checked&&pageCurrent>1){
		   pageCurrent--;
		   $("#pageId").data("pageCurrent",pageCurrent);
	   }
	   doGetObjects();
   }

这里的data接受的数据是在page.html那个分页功能是已经存好了。

这里需要更新delete函数:

function doDeleteObjects() {
   var ids=doGetCheckedId();
   if (ids.length==0){
      alert("至少选一个");
      return;
   }
   if(!confirm("确认删除吗?"))return;
   var url="log/doDeleteObjects";
   var params={"ids":ids.toString()};
   console.log(params);
   $.post(url,params,function (result) {
      if(result.state==1){
         alert(result.message);
         //doGetObjects();
                  doRefreshAfterDeleteOK();
      }else {
         alert(result.message);
         
      }
   });

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用友U8 cloud,信创云ERP的数智先锋

编辑&#xff1a;阿冒设计&#xff1a;沐由从来未曾有过一个春天&#xff0c;能够像当下这般被如此由衷地期待。经历了漫长的1000多个日日夜夜之后&#xff0c;我们的工作与生活终于回到正轨。自2023年以来&#xff0c;中国市场迎来“开门红”&#xff0c;消费市场加速回暖&…

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题

颜色平衡树问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序问题描述 格式输入 输入的第一行包含一个整数 n &#xff0c;表示树的结点数。 接下来 n 行&#xff0c;每行包含两个整数 Ci , Fi&#xff0c;用一个空格分隔&#xff0c;表示第 i 个结点 …

新能源汽车高压配电管理(PDU/BDU)

一、概念与组成 PDU(Power Distribution Unit)&#xff0c;即高压配电单元&#xff0c;功能是负责新能源车高压系统中的电源分配与管理&#xff0c;为整车提供充放电控制、高压部件上电控制、电路过载短路保护、高压采样、低压控制等功能&#xff0c;保护和监控高压系统的运行…

智慧井盖-物联网智能井盖系统-管网数字化监测,守护城市生命线

平升电子智慧井盖-物联网智能井盖系统-管网数字化监测,守护城市生命线实现对井下设备和井盖状态的监测及预警&#xff0c;是各类智慧管网管理系统中不可或缺的重要设备&#xff0c;解决了井下监测环境潮湿易水淹、电力供应困难、通讯不畅等难题&#xff0c; 适合安装于城市主干…

【MySQL--05】表的约束

文章目录 1.表的约束1.1空属性1.2默认值default vs null1.3列描述1.4 zerofill1.5主键primary key1.6 自增长auto_increment1.7唯一键 unique如何设计主键&#xff1f;1.8 外键 foreign key 1.表的约束 真正的约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xf…

基于springboot和ajax的简单项目 02.一直会出现的页面的上一页,下一页,分页与总页数 (下)

在各种功能中会一直出现页面分页的问题。 对此&#xff0c;可以使用pojo对象&#xff0c;来一直管理页面分页的功能。 01.创建相关的pojo对象。 由于属性是来辅助sql语句的&#xff0c;这个pojo对象。 Setter Getter ToString NoArgsConstructorpublic class PageObject<T&…

day11_面向对象

今日内容 零、 复习昨日 一、作业 二、局部变量&成员变量 三、this关键字 四、构造方法 五、重载 零、 复习昨日 晨考 public class Phone {// 成员属性/成员变量// 数据类型 变量名;double price;String brand;// 成员方法public void call(String num) {System.out.print…

流程引擎基础知识

流程引擎基础知识 流程部署流程取消部署流程发起流程取回流程作废流程委托流程流转常用流程表介绍备注 流程部署 1.后台直接导入bpmn /**流程部署源代码*/public void deploy() {ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine();RepositoryService re…

UML与代码的对应关系

五种关系的耦合强弱比较&#xff1a;依赖<关联<聚合<组合<继承 依赖 虚线箭头 可描述为&#xff1a;Uses a 依赖是类的五种关系中耦合最小的一种关系。 因为在生成代码的时候&#xff0c;这两个关系类都不会增加属性。 注意1&#xff1a; Water类的生命期&…

1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光&#xff0c;看起来MIT的课程的确是很有饱满度。 这里&#xff0c;再整理一份课程中的作业要求。 …

JavaWeb03 Cookie和Session

一个网站怎么证明你来过&#xff1f; 1.首次访问时服务器给客户端一个cookie&#xff0c;下次客户端再次访问会自动携带cookie&#xff0c;注意cookie可以是多个 2.首次访问时服务器登记了客户端一系列信息&#xff0c;下次客户端再进行访问时服务器自动匹配此客户端是否访问…

【架构设计】如何设计一个几十万在线用户弹幕系统

文章目录 一、前言二、项目介绍客户端轮询WebSocket主动推送 三、弹幕初始架构四、弹幕架构演进五、弹幕存储六、弹幕查询七、总结 一、前言 现在无论是直播还是电视剧&#xff0c;我们都可以看到上面慢慢的弹幕&#xff0c;满足十几万用户在线的弹幕系统&#xff0c;我们该如…

vue3插槽的使用

插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的标签。 1.插槽基本使用 子组件SlotComponent.vue <template><div cla…

逐一解释一下四个 “内存屏障” 是什么

什么是内存屏障&#xff1f;硬件层⾯&#xff0c;内存屏障分两种&#xff1a;读屏障&#xff08;Load Barrier&#xff09;和写屏障&#xff08;Store Barrier&#xff09;。内存屏障有两个作⽤&#xff1a; 阻⽌屏障两侧的指令重排序&#xff1b;强制把写缓冲区/⾼速缓存中的…

【软考备战·希赛网每日一练】2023年4月18日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源&#xff1a;2023年04月18日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; MTTF&#xff1a;平均无故障时间 MTTR&#xff1a;平均故障修复时间 可用性/可靠性MTTF…

一觉醒后ChatGPT 被淘汰了

OpenAI 的 Andrej Karpathy 都大力宣传&#xff0c;认为 AutoGPT 是 prompt 工程的下一个前沿。 近日&#xff0c;AI 界貌似出现了一种新的趋势&#xff1a;自主人工智能。 这不是空穴来风&#xff0c;最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…

zookeeper + kafka集群搭建详解

目录 1.消息队列介绍 1.为什么需要消息队列 &#xff08;MO&#xff09; 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker&#xff08;服务器&#xff09; 2. Topic&#xff08;一个队…

SAR ADC系列25:作业和上机实践

作业&#xff1a; 异步SAR逻辑中VALID信号如何产生&#xff1f;答&#xff1a;OUTP和OUTN与非。单纯通过减小“比较器环路”的延时(t1t22*t32*t4)的方式来提升ADC的转换速率可行吗&#xff1f;为什么&#xff1f;答&#xff1a;不可行&#xff0c;还要考虑CDAC建立的速度&…

人工智能大模型多场景应用原理解析

前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后&#xff0c;收到大量读者的反馈&#xff0c;诸如:在了解了核心原理后想进一步了解未来的发展趋势(比如生成式人工智能和元宇宙能擦出什么样的火花&#xff1f;)&#xff0c;大模型…

抢鲜发布:Flutter 3.7更新详解

本文首发自「慕课网」(imooc.com)&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;CrazyCodeBoy|慕课网讲师 新年伊始&#xff0c;由 Flutter 3.7 正式版来「打头阵」&#xff01;我们与整个…