实例:SSH结合Easyui实现Datagrid的批量删除功能

时间:2021-06-12 20:28:32

在我先前的基础上面添加批量删除功能。实现的效果如下

实例:SSH结合Easyui实现Datagrid的批量删除功能

删除成功

实例:SSH结合Easyui实现Datagrid的批量删除功能

通常情况下删除不应该真正删除,而是应该有一个标志flag,但flag=true表示状态可见,但flag=false表示状态不可见,为删除状态。便于日后数据库的维护和信息的查询。因此表结构添加一个flag字段

实例:SSH结合Easyui实现Datagrid的批量删除功能

没有改变的代码这里就不写了,发生改变的代码贴出来

1、因为表结构发生变化。所以对应的Student.java和Student.hbm.xml发生改变

  1. package com.model;
  2. public class Student {
  3. String studentid;// 主键
  4. String name;// 姓名
  5. String gender;// 性别
  6. String age;// 年龄
  7. String flag;//标志
  8. public String getStudentid() {
  9. return studentid;
  10. }
  11. public void setStudentid(String studentid) {
  12. this.studentid = studentid;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public String getGender() {
  21. return gender;
  22. }
  23. public void setGender(String gender) {
  24. this.gender = gender;
  25. }
  26. public String getAge() {
  27. return age;
  28. }
  29. public void setAge(String age) {
  30. this.age = age;
  31. }
  32. public String getFlag() {
  33. return flag;
  34. }
  35. public void setFlag(String flag) {
  36. this.flag = flag;
  37. }
  38. }

Student.hbm.xml的代码

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!-- Generated 2013-6-23 23:31:47 by Hibernate Tools 3.4.0.CR1 -->
  5. <hibernate-mapping>
  6. <class name="com.model.Student" table="STUDENT">
  7. <id name="studentid" type="java.lang.String">
  8. <column name="STUDENTID" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="name" type="java.lang.String">
  12. <column name="NAME" />
  13. </property>
  14. <property name="gender" type="java.lang.String">
  15. <column name="GENDER" />
  16. </property>
  17. <property name="age" type="java.lang.String">
  18. <column name="AGE" />
  19. </property>
  20. <property name="flag" type="java.lang.String">
  21. <column name="FLAG" />
  22. </property>
  23. </class>
  24. </hibernate-mapping>

2、对应的Action。StudentAction

  1. package com.action;
  2. import java.io.PrintWriter;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import net.sf.json.JSONObject;
  8. import org.apache.log4j.Logger;
  9. import org.apache.struts2.ServletActionContext;
  10. import com.model.Student;
  11. import com.service.StudentService;
  12. public class StudentAction {
  13. static Logger log = Logger.getLogger(StudentAction.class);
  14. private JSONObject jsonObj;
  15. private String rows;// 每页显示的记录数
  16. private String page;// 当前第几页
  17. private StudentService student_services;//String依赖注入
  18. private Student student;//学生
  19. private String parameter;//参数
  20. private String table;//表名
  21. private String field;//字段
  22. private String num;//
  23. private String ids;//
  24. //查询出所有学生信息
  25. public String allInfo() throws Exception {
  26. log.info("查询出所有学生信息");  //引用到log4j你应该加入  log4j的配置文件,不然用System.out.println();来替换
  27. List list = student_services.getStudentList(page, rows);//传入参数页码和行数,获取当前页的数据
  28. this.toBeJson(list,student_services.getStudentTotal());//调用自己写的toBeJson方法转化为JSon格式
  29. return null;
  30. }
  31. //批量删除信息
  32. public String del() throws Exception{
  33. log.info("删除学生信息");
  34. log.info("循环次数:"+num);
  35. List list=new ArrayList();
  36. Boolean b=false;
  37. int temp=Integer.parseInt(num);//循环次数
  38. int j=0;
  39. for (int i = 0; i < temp; i++) {
  40. list.add(ids.substring(j, j+3));//将一个字符串打散成多个字符串
  41. j=j+4;
  42. log.info("==========="+list.get(i));
  43. student_services.deleteStudent((String) list.get(i));//根据ID主键进行删除操作
  44. }
  45. return null;
  46. }
  47. //新增学生信息
  48. public String add() throws Exception{
  49. log.info("新增学生信息");
  50. student_services.saveStudent(student);
  51. return null;
  52. }
  53. //查询唯一性
  54. public String verify() throws Exception{
  55. log.info("ACTION验证唯一性");
  56. String s = student_services.queryBy_unique(table,field ,parameter);
  57. log.info("结果:" + s);
  58. //将验证的结果返回JSP页面,s为1代表没有重复,为0代表有重复
  59. HttpServletResponse response = ServletActionContext.getResponse();
  60. response.setContentType("text/html;charset=utf-8");
  61. PrintWriter out = response.getWriter();
  62. out.print(s);
  63. out.flush();
  64. out.close();
  65. return null;
  66. }
  67. //转化为Json格式
  68. public void toBeJson(List list,int total) throws Exception{
  69. HttpServletResponse response = ServletActionContext.getResponse();
  70. HttpServletRequest request = ServletActionContext.getRequest();
  71. JSONObject jobj = new JSONObject();//new一个JSON
  72. jobj.accumulate("total",total );//total代表一共有多少数据
  73. jobj.accumulate("rows", list);//row是代表显示的页的数据
  74. response.setCharacterEncoding("utf-8");//指定为utf-8
  75. response.getWriter().write(jobj.toString());//转化为JSOn格式
  76. log.info(jobj.toString());
  77. }
  78. public StudentService getStudent_services() {
  79. return student_services;
  80. }
  81. public void setStudent_services(StudentService student_services) {
  82. this.student_services = student_services;
  83. }
  84. public void setJsonObj(JSONObject jsonObj) {
  85. this.jsonObj = jsonObj;
  86. }
  87. public void setRows(String rows) {
  88. this.rows = rows;
  89. }
  90. public void setPage(String page) {
  91. this.page = page;
  92. }
  93. public void setStudent(Student student) {
  94. this.student = student;
  95. }
  96. public Student getStudent() {
  97. return student;
  98. }
  99. public void setParameter(String parameter) {
  100. this.parameter = parameter;
  101. }
  102. public void setTable(String table) {
  103. this.table = table;
  104. }
  105. public void setField(String field) {
  106. this.field = field;
  107. }
  108. public void setNum(String num) {
  109. this.num = num;
  110. }
  111. public void setIds(String ids) {
  112. this.ids = ids;
  113. }
  114. }

3、对应的接口StudentService

  1. package com.service;
  2. import java.util.List;
  3. import com.model.Student;
  4. public interface StudentService {
  5. public List getStudentList(String page,String rows) throws Exception;//根据第几页获取,每页几行获取数据
  6. public int getStudentTotal() throws Exception;//统计一共有多少数据
  7. public void saveStudent(Student student)throws Exception;//新增学生信息
  8. public String queryBy_unique(String table,String field ,String parameter) throws Exception;//验证唯一性
  9. public void deleteStudent(String ids) throws Exception;//删除学生信息
  10. }

4、对应的接口实现类,从43行开始的del()方法用循环的方式输出多个id,进行批量删除

  1. package com.serviceImpl;
  2. import java.util.List;
  3. import org.apache.log4j.Logger;
  4. import org.hibernate.Criteria;
  5. import org.hibernate.Query;
  6. import org.hibernate.SessionFactory;
  7. import org.hibernate.criterion.Restrictions;
  8. import com.model.Student;
  9. import com.service.StudentService;
  10. public class StudentServiceImpl implements StudentService {
  11. Logger log=Logger.getLogger(this.getClass());
  12. private SessionFactory sessionFactory;
  13. // 根据第几页获取,每页几行获取数据
  14. public List getStudentList(String page, String rows) {
  15. //当为缺省值的时候进行赋值
  16. int currentpage = Integer.parseInt((page == null || page == "0") ? "1": page);//第几页
  17. int pagesize = Integer.parseInt((rows == null || rows == "0") ? "10": rows);//每页多少行
  18. //查询学生信息,顺便按学号进行排序
  19. List list = this.sessionFactory.getCurrentSession().createQuery("from Student where flag='true'  order by studentid")
  20. .setFirstResult((currentpage - 1) * pagesize).setMaxResults(pagesize).list();
  21. //setFirstResult 是设置开始查找处。setFirstResult的值 (当前页面-1)X每页条数
  22. //设置每页最多显示的条数  setMaxResults每页的条数了
  23. return list;
  24. }
  25. // 统计一共有多少数据
  26. public int getStudentTotal() throws Exception {
  27. return this.sessionFactory.getCurrentSession().find("from Student where flag='true'").size();
  28. }
  29. // 新增学生信息
  30. public void saveStudent(Student student) throws Exception {
  31. student.setFlag("true");
  32. this.sessionFactory.getCurrentSession().save(student);
  33. }
  34. //判断是否具有唯一性
  35. public String queryBy_unique(String table,String field ,String parameter) throws Exception {
  36. System.out.println("===============验证唯一性=========");
  37. String s="select * from "+table +" t where t."+field+"='"+parameter+"'";
  38. System.out.println("SQL语句:"+s);
  39. Query query = this.sessionFactory.getCurrentSession().createSQLQuery(s);
  40. int n=query.list().size();
  41. if(n==0)//如果集合的数量为0,说明没有重复,具有唯一性
  42. {
  43. return "1";//返回值为1,代表具有唯一性
  44. }
  45. return "0";//返回值为0,代表已经有了,重复了
  46. }
  47. //进行删除操作
  48. public void deleteStudent(String ids) throws Exception {
  49. log.info("删除学生信息");
  50. Student student=this.queryStudent(ids);
  51. student.setFlag("false");
  52. this.sessionFactory.getCurrentSession().update(student);
  53. }
  54. //根据学生主键查询学生信息
  55. public Student queryStudent(String id) throws Exception{
  56. log.info("根据学生主键查询学生信息");
  57. Criteria criteria=this.sessionFactory.getCurrentSession().createCriteria(Student.class);
  58. criteria.add(Restrictions.eq("studentid", id));
  59. Student student=(Student) criteria.list().get(0);
  60. return student;
  61. }
  62. public SessionFactory getSessionFactory() {
  63. return sessionFactory;
  64. }
  65. public void setSessionFactory(SessionFactory sessionFactory) {
  66. this.sessionFactory = sessionFactory;
  67. }
  68. }

5、对应的JSP页面index.jsp

  1. <%@ page language="java" pageEncoding="utf-8" isELIgnored="false"%>
  2. <%
  3. String path = request.getContextPath();
  4. %>
  5. <%@ taglib prefix="s" uri="/struts-tags"%>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  10. <title>Easyui</title>
  11. <!-- 引入Jquery -->
  12. <script type="text/javascript" src="<%=path%>/js/easyui/jquery-1.8.0.min.js" charset="utf-8"></script>
  13. <!-- 引入Jquery_easyui -->
  14. <script type="text/javascript" src="<%=path%>/js/easyui/jquery.easyui.min.js" charset="utf-8"></script>
  15. <!-- 引入easyUi国际化--中文 -->
  16. <script type="text/javascript" src="<%=path%>/js/easyui/locale/easyui-lang-zh_CN.js" charset="utf-8"></script>
  17. <!-- 引入easyUi默认的CSS格式--蓝色 -->
  18. <link rel="stylesheet" type="text/css" href="<%=path%>/js/easyui/themes/default/easyui.css" />
  19. <!-- 引入easyUi小图标 -->
  20. <link rel="stylesheet" type="text/css" href="<%=path%>/js/easyui/themes/icon.css" />
  21. <!-- 引入对应的JS,切记一定要放在Jquery.js和Jquery_Easyui.js后面,因为里面需要调用他们,建议放在最后面 -->
  22. <script type="text/javascript" src="<%=path%>/index.js" charset="utf-8"></script>
  23. </head>
  24. <body>
  25. <h2>
  26. <b>easyui的DataGrid实例</b>
  27. </h2>
  28. <table id="mydatagrid">
  29. <thead>
  30. <tr>
  31. <th data-options="field:'studentid',width:100,align:'center'">学生学号</th>
  32. <th data-options="field:'name',width:100,align:'center'">姓名</th>
  33. <th data-options="field:'gender',width:100,align:'center'">性别</th>
  34. <th data-options="field:'age',width:100,align:'center'">年龄</th>
  35. </tr>
  36. </thead>
  37. </table>
  38. <!-- 显示添加按钮的Div -->
  39. <div id="easyui_toolbar" style="padding: 2px 0px 2px 15px; height: auto">
  40. <a href="#" id="easyui_add" class="easyui-linkbutton" iconCls="icon-add" plain="true">添加学生信息</a>
  41. <a href="#" id="deltable" class="easyui-linkbutton"   iconCls="icon-remove" plain="true">批量删除</a>
  42. </div>
  43. <!-- 添加学生信息的表单       -->
  44. <div id="addDlg" class="easyui-dialog" style="width: 580px; height: 350px; padding: 10px 20px" closed="true" buttons="#addD*n">
  45. <form id="addForm" method="post">
  46. <table>
  47. <tr>
  48. <td>学生主键</td>
  49. <td>
  50. <input name="student.studentid" id="studentid" class="easyui-validatebox" required="true" missingMessage="学生主键不能为空">
  51. </td>
  52. <td>
  53. <!-- 存放提示重复信息的div -->
  54. <div id="xianshi1" style="float: left"></div>
  55. <div style="float: left"> </div>
  56. <div id="xianshi2" style="font-size: 14px; color: #FF0000; float: left"></div>
  57. </td>
  58. </tr>
  59. <tr>
  60. <td>姓名</td>
  61. <td>
  62. <input name="student.name" id="name" class="easyui-validatebox" required="true" missingMessage="姓名不能为空">
  63. </td>
  64. </tr>
  65. <tr>
  66. <td>性别</td>
  67. <td>
  68. <!-- 使用Easyui中的combobox -->
  69. <select class="easyui-combobox" style="width: 155px;" name="student.gender" id="gender" data-options="panelHeight:'auto'">
  70. <option value="男">男</option>
  71. <option value="女">女</option>
  72. </select>
  73. </td>
  74. </tr>
  75. <tr>
  76. <td>年龄</td>
  77. <td>
  78. <input name="student.age" id="age" class="easyui-validatebox">
  79. </td>
  80. </tr>
  81. </table>
  82. </form>
  83. </div>
  84. <!-- 保存学生信息的按钮,被Jquery设置,当没被调用的时候不显示     -->
  85. <div id="addD*n">
  86. <a href="#" id="addSaveBooktimecode" class="easyui-linkbutton" iconCls="icon-ok" onclick="add_ok()">确认</a>
  87. <a href="#" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#addDlg').dialog('close')">取消</a>
  88. </div>
  89. </body>
  90. </html>

6、对应的JavaScript页面。index.js

    1. var isClickOk=true;//判断的变量
    2. $(function() {
    3. //datagrid设置参数
    4. $('#mydatagrid').datagrid({
    5. title : 'datagrid实例',
    6. iconCls : 'icon-ok',
    7. width : 600,
    8. pageSize : 5,//默认选择的分页是每页5行数据
    9. pageList : [ 5, 10, 15, 20 ],//可以选择的分页集合
    10. nowrap : true,//设置为true,当数据长度超出列宽时将会自动截取
    11. striped : true,//设置为true将交替显示行背景。
    12. collapsible : true,//显示可折叠按钮
    13. toolbar:"#easyui_toolbar",//在添加 增添、删除、修改操作的按钮要用到这个
    14. url:'studentallInfo.action',//url调用Action方法
    15. loadMsg : '数据装载中......',
    16. //singleSelect:true,//为true时只能选择单行 为了实现批量删除必须隐去
    17. fitColumns:true,//允许表格自动缩放,以适应父容器
    18. sortName : 'studentid',//当数据表格初始化时以哪一列来排序
    19. sortOrder : 'asc',//定义排序顺序,可以是'asc'或者'desc'(正序或者倒序)。
    20. remoteSort : false,
    21. frozenColumns : [ [ {
    22. field : 'ck',
    23. checkbox : true
    24. } ] ],
    25. pagination : true,//分页
    26. rownumbers : true//行数
    27. });
    28. //当点击添加学生信息的时候触发
    29. $("#easyui_add").click(function() {
    30. $("#xianshi1").empty();//清除上次出现的图标1
    31. $("#xianshi2").empty();//清除上次出现的图标2
    32. $('#addDlg').dialog('open').dialog('setTitle', '添加学生信息');//打开对话框
    33. $('#addForm').form('clear');
    34. });
    35. //当光标移开焦点的时候进行重复验证
    36. $("#studentid").blur(function(){
    37. jQuery.ajax({   //使用Ajax异步验证主键是否重复
    38. type : "post",
    39. url : "studentverify.action?table=Student&field=studentid¶meter="+$('#studentid').val(),
    40. dataType:'json',
    41. success : function(s){
    42. if($('#studentid').val()==""){//当为主键为空的时候什么都不显示,因为Easyui的Validate里面已经自动方法限制
    43. }
    44. else if( s == "1" )//当返回值为1,表示在数据库中没有找到重复的主键
    45. {   isClickOk=true;
    46. $("#xianshi1").empty();
    47. var txt1="<img src="+"'imgs/agree_ok.gif'"+"/>";//引入打勾图标的路径
    48. $("#xianshi1").append(txt1);//在id为xianshi1里面加载打勾图标
    49. $("#xianshi2").empty();
    50. $("#xianshi2").append("未被使用");//在di为xianshi2中加载“未被使用”这四个字
    51. }
    52. else
    53. {
    54. $("#xianshi1").empty();
    55. isClickOk=false;
    56. var txt1="<img src="+"'imgs/agree_no.gif'"+"/>"//引入打叉图标的路径
    57. $("#xianshi1").append(txt1);//在id为xianshi1里面加载打叉图标
    58. $("#xianshi2").empty();
    59. $("#xianshi2").append("已被使用");//在id为xianshi2里面加载“已被使用”四个字
    60. }
    61. }
    62. });
    63. });
    64. /********** 点击删除按钮开始 ***********/
    65. $('#deltable').click(function(){
    66. var array = $('#mydatagrid').datagrid('getSelections');
    67. var id2="";
    68. var num=array.length;//获取要删除信息的个数
    69. for(var i=0; i<array.length; i++){//组成一个字符串,ID主键之间用逗号隔开
    70. if(i!=array.length-1){
    71. id2=id2+array[i].studentid+",";
    72. }else{
    73. id2=id2+array[i].studentid;
    74. }
    75. }
    76. var selected = $('#mydatagrid').datagrid('getSelected');
    77. if (array != "") {
    78. $.messager.defaults={ok:"确定",cancel:"取消"};
    79. $.messager.confirm('', '是否要删除该信息?', function(r){
    80. if (r){
    81. $.post("studentdel.action",
    82. {  ids:id2,num:num},function(response){
    83. if(response=="-1"){
    84. $.messager.alert('操作提示',"删除失败",'error');
    85. }else{
    86. $('#mydatagrid').datagrid({url:"studentallInfo.action"});
    87. $.messager.alert('操作提示',"删除成功",'info');
    88. }
    89. });
    90. }
    91. });
    92. }else{
    93. $.messager.alert('',"请先选择要删除的信息!");
    94. }
    95. });
    96. /********** 删除按钮结束 ***********/
    97. });
    98. //添加信息点击保存的时候触发此函数
    99. function add_ok(){
    100. $.messager.defaults={ok:"确定",cancel:"取消"};
    101. $.messager.confirm('Confirm', '您确定增加?', function(r){//使用确定,取消的选择框
    102. if (r){
    103. $('#addForm').form('submit',{//引入Easyui的Form
    104. url:"studentadd.action",//URL指向添加的Action
    105. onSubmit: function(){
    106. if(isClickOk==false){//当主键重复的时候先前就已经被设置为false,如果为false就不提交,显示提示框信息不能重复
    107. $.messager.alert('操作提示', '主键不能重复!','error');
    108. return false;
    109. }
    110. else if($('#addForm').form('validate')){//判断Easyui的Validate如果都没错误就同意提交
    111. $.messager.alert('操作提示', '添加信息成功!','info');
    112. return true;
    113. }else{//如果Easyui的Validate的验证有一个不完整就不提交
    114. $.messager.alert('操作提示', '信息填写不完整!','error');
    115. return false;
    116. }
    117. }
    118. });
    119. $('#mydatagrid').datagrid({url:'studentallInfo.action'});//实现Datagrid重新刷新效果
    120. $('#addDlg').dialog('close');//关闭对话框
    121. }
    122. });
    123. }