LayUi之数据表格的增删改查(内含完整源代码)

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于LayUi的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.数据表格是什么 

二.数据表格在什么时候使用(常见使用场景) 

三.怎么完成数据表格与数据库进行数据交互

效果展示

①新增 

②删除

③修改

项目层级

表结构

实体类

工具类

userManage.jsp(数据展示&模糊查询&删除界面)

userManage.js(对应界面的js)

userEdit.jsp(新增和修改)

userEdit.js(对应界面的js)

dao层

servlet

四.温馨提示 


一.数据表格是什么 

  • layui是一个基于web前端的UI框架,它提供了一系列简洁、易用的UI组件,包括数据表格(table)组件。数据表格是layui框架中用于展示和处理表格数据的组件
  • 在layui中,数据表格(table)组件可以通过简单的HTML结构和一些配置参数来创建。你可以在HTML中定义表格的基本结构,然后使用JavaScript代码初始化并配置表格组件。同时,你也可以通过代码动态地添加、修改和删除表格中的数据
  • 数据表格组件支持多种功能和样式配置,例如:分页、排序、筛选、编辑、格式化等。你可以根据自己的需求和设计要求,选择合适的配置参数来展示和处理表格数据

二.数据表格在什么时候使用(常见使用场景) 

  • 1. 数据管理和浏览:
    • 数据表格常用于展示和管理后台系统的数据,如用户管理、订单管理、商品管理等。它可以以表格形式呈现数据,同时提供分页、排序、筛选等功能,方便用户快速浏览和操作数据
  • 2. 报表和统计:
    • 数据表格也是生成报表和统计数据的常见工具。它可以将复杂的数据按照规定的行和列格式化展示,帮助用户更直观地理解和分析数据
  • 3. 数据导出和导入:
    • 数据表格组件通常提供了导出和导入数据的功能,可以将表格中的数据以Excel、CSV等格式导出,也可以通过导入功能将外部数据导入到表格中进行处理和展示
  • 4. 数据编辑和操作:
    • 数据表格可以支持用户对表格中的数据进行编辑和操作,比如修改数据、删除数据、批量操作等。通过配置相应的列类型和操作按钮,可以实现表格的交互性和数据处理功能
  • 5. 数据展示和比较:
    • 数据表格可以将多个数据源或多个维度的数据进行对比和展示。它可以根据需求设置可排序、可筛选的列,帮助用户对数据进行比较和分析

总的来说,数据表格在许多需要展示、管理、分析和操作大量数据的场景下非常有用。它提供了一种直观、交互式的方式来处理和展示数据,让用户能够高效地进行数据管理和数据分析工作

三.怎么完成数据表格与数据库进行数据交互

效果展示

①新增 

②删除

③修改

项目层级

表结构

还记得我们之前所讲到的行转列吗 这一篇将用到它啦!在此表中有一个rid,但是我们在界面上需要展示的是角色名,而不是id。所以我们用到行转列来将其进行转换(效果如下图)

实体类

package com.wh.entity;

public class User {
private long id;
private String name;
private String loginName;
private String pwd;
private long rid;

public User() {
	// TODO Auto-generated constructor stub
}

public User(long id, String name, String loginName, String pwd, long rid) {
	super();
	this.id = id;
	this.name = name;
	this.loginName = loginName;
	this.pwd = pwd;
	this.rid = rid;
}

public User(String name, String loginName, String pwd, long rid) {
	super();
	this.name = name;
	this.loginName = loginName;
	this.pwd = pwd;
	this.rid = rid;
}


public User(String name, String loginName, String pwd) {
	super();
	this.name = name;
	this.loginName = loginName;
	this.pwd = pwd;
}

public long getId() {
	return id;
}

public void setId(long id) {
	this.id = id;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public String getLoginName() {
	return loginName;
}

public void setLoginName(String loginName) {
	this.loginName = loginName;
}

public String getPwd() {
	return pwd;
}

public void setPwd(String pwd) {
	this.pwd = pwd;
}

public long getRid() {
	return rid;
}

public void setRid(long rid) {
	this.rid = rid;
}

@Override
public String toString() {
	return "User [id=" + id + ", name=" + name + ", loginName=" + loginName + ", pwd=" + pwd + ", rid=" + rid + "]";
}



}

工具类

还有一部分工具类在layui入门的那一篇博文中!!!

LayUi基础入门【附有案例从0到1详解】http://t.csdn.cn/JeBe0

为什么我们需要用到下面这个叫做'R'的工具类呢?我们可以

先观察一下数据表格中用到的数据, 其中有’code‘,’msg‘以及data,于是在这个工具类中我便重载了多个方法,用来回显适合的数据!!

package com.zking.util;

import java.util.HashMap;
/**
 * 输出符合数据表格的数据的工具类
 * @author W
 *
 */
public class R extends HashMap{
	public R data(String key, Object value) {
		this.put(key, value);
		return this;
	}
	
	public static R ok(int code, String msg) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.data("success", false).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R ok(int code, String msg,Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("data", data);
		return r;
	}
	
	public static R ok(int code, String msg, long count, Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("count", count).data("data", data);
		return r;
	}
}

这个BaseDao中有两个重载的查询方法,其原因与用途如下👇👇

1.当实体类的属性与数据库的字段相同的时候使用 ➡List<User> BaseDao中的这一个方法
2.当实体类的属性与数据库的字段不同使用➡List<Map<String, Object>>(有可能是通过行转列查出角色名的方法,也可能是连表查询的方法,总之就是数据库字段与实体类属性值不对等的情况下使用)

package com.zking.util;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 所有Dao层的父类 BookDao UserDao OrderDao ...
 * 
 * @author W
 *
 * @param <T>
 */
public class BaseDao<T> {

	/**
	 * 适合多表联查的数据返回
	 * @param sql
	 * @param pageBean
	 * @return
	 * @throws SQLException
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 */
	public List<Map<String, Object>> executeQuery(String sql, PageBean pageBean)
			throws SQLException, InstantiationException, IllegalAccessException {

		List<Map<String, Object>> list = new ArrayList<>();
		Connection con = DBAccess.getConnection();
		PreparedStatement pst = null;
		ResultSet rs = null;

		/*
		 * 是否需要分页? 无需分页(项目中的下拉框,查询条件教员下拉框,无须分页) 必须分页(项目中列表类需求、订单列表、商品列表、学生列表...)
		 */
		if (pageBean != null && pageBean.isPagination()) {
			// 必须分页(列表需求)
			String countSQL = getCountSQL(sql);
			pst = con.prepareStatement(countSQL);
			rs = pst.executeQuery();
			if (rs.next()) {
				pageBean.setTotal(String.valueOf(rs.getObject(1)));
			}

			// 挪动到下面,是因为最后才处理返回的结果集
			// -- sql=SELECT * FROM t_mvc_book WHERE bname like '%圣墟%'
			// -- pageSql=sql limit (page-1)*rows,rows 对应某一页的数据
			// -- countSql=select count(1) from (sql) t 符合条件的总记录数
			String pageSQL = getPageSQL(sql, pageBean);// 符合条件的某一页数据
			pst = con.prepareStatement(pageSQL);
			rs = pst.executeQuery();
		} else {
			// 不分页(select需求)
			pst = con.prepareStatement(sql);// 符合条件的所有数据
			rs = pst.executeQuery();
		}

		// 获取源数据
		ResultSetMetaData md = rs.getMetaData();
		int count = md.getColumnCount();
		Map<String, Object> map = null;
		while (rs.next()) {
			map = new HashMap<>();
			for (int i = 1; i <= count; i++) {
//				map.put(md.getColumnName(i), rs.getObject(i));
				map.put(md.getColumnLabel(i), rs.getObject(i));
			}
			list.add(map);
		}
		return list;

	}

	/**
	 * 
	 * @param sql
	 * @param attrs
	 *            map中的key
	 * @param paMap
	 *            jsp向后台传递的参数集合
	 * @return
	 * @throws SQLException
	 * @throws NoSuchFieldException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 */
	public int executeUpdate(String sql, String[] attrs, Map<String, String[]> paMap) throws SQLException,
			NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
		Connection con = DBAccess.getConnection();
		PreparedStatement pst = con.prepareStatement(sql);
		for (int i = 0; i < attrs.length; i++) {
			pst.setObject(i + 1, JsonUtils.getParamVal(paMap, attrs[i]));
		}
		return pst.executeUpdate();
	}

	/**
	 * 批处理
	 * @param sqlLst
	 * @return
	 */
	public static int executeUpdateBatch(String[] sqlLst) {
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
			conn = DBAccess.getConnection();
			// 设置不自动提交
			conn.setAutoCommit(false);
			for (String sql : sqlLst) {
				stmt = conn.prepareStatement(sql);
				stmt.executeUpdate();
			}
			conn.commit();
		} catch (Exception e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
				throw new RuntimeException(e1);
			}
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			DBAccess.close(conn, stmt, null);
		}
		return sqlLst.length;
	}

	/**
	 * 通用的增删改方法
	 * 
	 * @param book
	 * @throws Exception
	 */
	public int executeUpdate(String sql, T t, String[] attrs) throws Exception {
		// String[] attrs = new String[] {"bid", "bname", "price"};
		Connection con = DBAccess.getConnection();
		PreparedStatement pst = con.prepareStatement(sql);
		// pst.setObject(1, book.getBid());
		// pst.setObject(2, book.getBname());
		// pst.setObject(3, book.getPrice());
		/*
		 * 思路: 1.从传进来的t中读取属性值 2.往预定义对象中设置了值
		 * 
		 * t->book f->bid
		 */
		for (int i = 0; i < attrs.length; i++) {
			Field f = t.getClass().getDeclaredField(attrs[i]);
			f.setAccessible(true);
			pst.setObject(i + 1, f.get(t));
		}
		return pst.executeUpdate();
	}

	/**
	 * 通用分页查询
	 * 
	 * @param sql
	 * @param clz
	 * @return
	 * @throws Exception
	 */
	public List<T> executeQuery(String sql, Class<T> clz, PageBean pageBean) throws Exception {
		List<T> list = new ArrayList<T>();
		Connection con = DBAccess.getConnection();
		;
		PreparedStatement pst = null;
		ResultSet rs = null;

		/*
		 * 是否需要分页? 无需分页(项目中的下拉框,查询条件教员下拉框,无须分页) 必须分页(项目中列表类需求、订单列表、商品列表、学生列表...)
		 */
		if (pageBean != null && pageBean.isPagination()) {
			// 必须分页(列表需求)
			String countSQL = getCountSQL(sql);
			pst = con.prepareStatement(countSQL);
			rs = pst.executeQuery();
			if (rs.next()) {
				pageBean.setTotal(String.valueOf(rs.getObject(1)));
			}

			// 挪动到下面,是因为最后才处理返回的结果集
			// -- sql=SELECT * FROM t_mvc_book WHERE bname like '%圣墟%'
			// -- pageSql=sql limit (page-1)*rows,rows 对应某一页的数据
			// -- countSql=select count(1) from (sql) t 符合条件的总记录数
			String pageSQL = getPageSQL(sql, pageBean);// 符合条件的某一页数据
			pst = con.prepareStatement(pageSQL);
			rs = pst.executeQuery();
		} else {
			// 不分页(select需求)
			pst = con.prepareStatement(sql);// 符合条件的所有数据
			rs = pst.executeQuery();
		}

		while (rs.next()) {
			T t = clz.newInstance();
			Field[] fields = clz.getDeclaredFields();
			for (Field f : fields) {
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));
			}
			list.add(t);
		}
		return list;
	}

	/**
	 * 将原生SQL转换成符合条件的总记录数countSQL
	 * 
	 * @param sql
	 * @return
	 */
	private String getCountSQL(String sql) {
		// -- countSql=select count(1) from (sql) t 符合条件的总记录数
		return "select count(1) from (" + sql + ") t";
	}

	/**
	 * 将原生SQL转换成pageSQL
	 * 
	 * @param sql
	 * @param pageBean
	 * @return
	 */
	private String getPageSQL(String sql, PageBean pageBean) {
		// (this.page - 1) * this.rows
		// pageSql=sql limit (page-1)*rows,rows
		return sql + " limit " + pageBean.getStartIndex() + "," + pageBean.getRows();
	}
}

配置文件以及公共页面都在layui入门的那一篇博文中👇👇

LayUi基础入门【附有案例从0到1详解】http://t.csdn.cn/JeBe0

userManage.jsp(数据展示&模糊查询&删除界面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@include file="/common/head.jsp" %>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 引入 layui.js -->
<script src="static/js/system/userManage.js"></script>
 
<title>用户管理</title>
</head>
<body>
	<!-- 搜索栏 -->
	<div class="layui-form-item">
	  <div class="layui-inline">
	    <label class="layui-form-label">用户名:</label>
	    <div class="layui-input-inline">
	      <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
	    </div>
	  </div>
	  
	  <div class="layui-inline">
	    <div class="layui-input-inline">
	      <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
	      	<i class="layui-icon layui-icon-search"></i>
	      	查询
	      </button>
	      <button id="btn_add" type="button" class="layui-btn">新增</button>
	    </div>
	  </div>
	  
	</div>
	<!-- 数据表格及分页 -->
	<!--layui-table:在其他地方通过该 filter 字符串来操作该表格(也就是在其他地方可以通过这个tb,使用操作这张表)  -->
	<table id="tb" lay-filter="tb" class="layui-hide" style="margin-top:-15px;"></table>
	<!-- 对话框(新增和编辑共用一个页面) -->
	
	<script type="text/html" id="toolbar">
 		<button class="layui-btn layui-btn-sm" lay-event="edit">编辑</button>
 		<button class="layui-btn layui-btn-sm" lay-event="del">删除</button>
 		<button class="layui-btn layui-btn-sm" lay-event="reset">重置密码</button>
	</script>
</body>
</html>

userManage.js(对应界面的js)

//把需要用到的模块定义成全局变量
let layer,$,table;
var row;
layui.use(['jquery','layer','table'],function(){
	layer=layui.layer,
	$=layui.jquery,
	table=layui.table;
	//初始化表格
	initTable();
	//查询按钮的点击事件
	$('#btn_search').click(function(){
		select();//调用写好的查询的方法
	});
	
	//绑定新增按钮的点击事件
	$('#btn_add').click(function(){
		row=null;
		open('新增');
	});
});
 
//1.初始化数据表格
function initTable(){
	table.render({           //执行渲染
        elem: '#tb',         //指定原始表格元素选择器(推荐id选择器)
        url: 'user.action?methodName=listUserRole',     //请求地址
        height: 820,         //自定义高度
        loading: false,      //是否显示加载条(默认 true)
        cols: [[             //设置表头 field是数据库的字段名,title是显示在页面中的值
            {field: 'id', title: '用户编号', width: 210},
            {field: 'name', title: '用户名', width: 210},
            {field: 'loginName', title: '登录账号', width: 210},
            {field: 'rname', title: '用户角色名', width: 210},
            {field: '', title: '操作', width: 220,toolbar:'#toolbar'},//#toolbar是工具栏的id
        ]]
    });
	
	//在页面中的<table>中必须配置lay-filter="tb_goods"属性才能触发属性!!!
	table.on('tool(tb)', function (obj) {//obj是指这张表中的数据
		row = obj.data;//将这张表中的数据赋给row这个变量
		//obj.event:获取触发事件的元素的 event 值,用于区分不同的操作
		if (obj.event == "edit") {//如果这个值等于edit,那么调用open("编辑");
			open("编辑");
		}else if(obj.event == "del"){//如果这个值等于del,那么跳到user.action调用删除的方法
			layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
			  $.post('user.action?methodName=del&id='+row.id,{
			  },function(del){
				  if(rs.success){
					//调用查询方法刷新数据
	        		   select();
	        	   }else{
	        		   layer.msg(rs.msg,function(){});
	        	   }
			  },'json');
			  layer.close(index);
			});
		}else{
 
		}
	});
}
 
//2.点击查询
function select(){
	//reload中填写的‘tb’是表格的id
	table.reload('tb', {
        url: 'user.action', //请求地址
        method: 'POST',                    //请求方式,GET或者POST
        loading: true,                     //是否显示加载条(默认 true)
        page: true,                        //是否分页
        where: {                           //设定异步数据接口的额外参数,任意设
        	'methodName':'listUserRole',
        	'name':$('#name').val()//获取输入框输入的值
        },  
        request: {                         //自定义分页请求参数名
            pageName: 'page', //页码的参数名称,默认:page
            limitName: 'rows' //每页数据量的参数名,默认:limit
        }
   });
}
 
//3.对话框
function open(title){
    layer.open({
       type: 2,  //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
       title:title,
       area: ['660px', '340px'],   //宽高
       skin: 'layui-layer-rim',    //样式类名
       content:  'jsp/system/userEdit.jsp', //编辑页面
       btn:['保存','关闭'],
       yes: function(index, layero){
    	   //调用子页面中提供的getData方法,快速获取子页面的form表单数据
           let data= $(layero).find("iframe")[0].contentWindow.getData();//父调子
           //console.log(data);
           //判断title标题
           let methodName="add";
           if(title=="编辑")
        	   methodName="upd";
           $.post('user.action?methodName='+methodName,
        		   data,function(rs){
        	   if(rs.success){
        		   //关闭对话框
        		   layer.closeAll();
        		   //调用查询方法刷新数据
        		   select();
        	   }else{
        		   layer.msg(rs.msg,function(){});
        	   }
           },'json');
       },
       btn2: function(index, layero){
    	   layer.closeAll();
       },
    });
 }

userEdit.jsp(新增和修改)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="/common/head.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="static/js/system/userEdit.js"></script>
<title>用户新增</title>
</head>
<style>
.layui-form-select dl{
	max-height:150px;
}
</style>
<body>
<div style="padding:10px;">
    <form class="layui-form layui-form-pane" lay-filter="user">
        <input type="hidden" name="id"/>
        <div class="layui-form-item">
            <label class="layui-form-label">用户名称</label>
            <div class="layui-input-block">
                <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">用户角色</label>
            <div class="layui-input-block">
                <select name="rid">
                    <option value="">---请选择---</option>
                    <option value="1">管理员</option>
                    <option value="2">发起者</option>
                    <option value="3">审批者</option>
                    <option value="4">参与者</option>
                    <option value="5">会议管理员</option>
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">登录账号</label>
            <div class="layui-input-block">
                <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">登录密码</label>
            <div class="layui-input-block">
                <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
            </div>
        </div>
    </form>
</div>
</body>
</html>

userEdit.js(对应界面的js)

let layer,form,$;
layui.use(['layer','form','jquery'],function(){
	layer=layui.layer,
	form=layui.form,
	$=layui.jquery;
	initData();
});
 
function initData(){
	console.log(parent.row);
	if(null!=parent.row){//子调父
		 //点击编辑按钮的时候
		//$.extend({}, parent.row || {}) 的作用是创建一个新的对象,并将 parent.row 中的键值对复制到该新对象中,达到给表单赋值的目的
	     form.val('user',$.extend({}, parent.row||{}));//将父页面传递的行数据赋值到名为 'user' 的表单中
	     $('#name').attr('readonly','readonly');//readonly:设置为只读状态
	}
}
 
function getData(){
	//<form class="layui-form layui-form-pane" lay-filter="user">
	//取 user from中的值
	return form.val('user');
}

dao层

package com.wh.dao;

import java.util.List;
import java.util.Map;

import com.wh.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
/**
 * dao层
 * @author W
 *
 */
public class UserDao extends BaseDao<User> {
	//增加
	public int add(User user) throws Exception {
		String sql = "insert into t_oa_user(name,loginName,pwd) values(?,?,?)";
		return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});
	}
	// 删除
public int del(User user) throws Exception {
	 String sql = "delete from t_oa_user where id = ?";// 定义sql语句
	return super.executeUpdate(sql, user,new String[] {"id"});
}

	// 修改
public int upd(User user) throws Exception {
	String sql = "update  t_oa_user set name=?,loginName=?,pwd=? where id=?";
	return super.executeUpdate(sql,user,new String[] {"name","loginName","pwd","id"});
}
	
//查询角色的信息
//当实体类的属性与数据库的字段相同的时候使用 ➡List<User> BaseDao中的这一个方法
//当实体类的属性与数据库的字段不同使用➡List<Map<String, Object>>(可能有一个数据库中没有的字段,比如下面的这个给通过行转列查出角色名的方法,也可能是连表查询出来的字段,总之就是数据库字段与实体类属性值不对等的情况下使用)
public List<Map<String, Object>> listUserRole(User user, PageBean pageBean) throws Exception {
	String sql = "select *,\r\n" + 
			"(case rid\r\n" + 
			"when 1 then '管理人员'\r\n" + 
			"when 4 then '参与者'\r\n" + 
			"else '其他角色' end) as rname\r\n" + 
			"from t_oa_user  where 1=1 ";
	String name = user.getName();
	if (StringUtils.isNotBlank(name))
		sql += " and name like '%" +name+ "%' ";
	return super.executeQuery(sql, pageBean);
}
	
	//查询所有
	public List<User> list( User user, PageBean pageBean) throws Exception {
  String sql="select * from t_oa_user";
		return super.executeQuery(sql, User.class, pageBean);
	}
	
	//登录
	public User login( User user) throws Exception {
		  String sql="select * from t_oa_user where  loginName =  '"+user.getLoginName()+"' and pwd = '"+user.getPwd()+"' ";
		  List<User> list=	super.executeQuery(sql, User.class, null);
		  if(list!=null&&list.size()==1) {
			  return list.get(0);
		  }else {
			  return null;
		  }
			}
	
	//注册
		public int register(User user) throws Exception {
	 String sql = "insert into t_oa_user(name,loginName,pwd,rid) values(?,?,?,0);";// 定义sql语句
			return super.executeUpdate(sql, user,new String[] {"name","loginName","pwd"});
		}	
}

servlet

package com.wh.web;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.wh.dao.UserDao;
import com.wh.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;

public class UserAction extends ActionSupport implements ModelDriver<User> {
	private User user = new User();
	private UserDao ud = new UserDao();

	// 登录
	public void login(HttpServletRequest req, HttpServletResponse resp) {
		try {
			User login = ud.login(user);
			ResponseUtil.writeJson(resp, login);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 注册
	public void register(HttpServletRequest req, HttpServletResponse resp) {
		try {
			int register = ud.register(user);
			if (register > 0) {
				ResponseUtil.writeJson(resp, "OK");
			} else {
				ResponseUtil.writeJson(resp, "NO");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 增加
	public String add(HttpServletRequest req, HttpServletResponse resp) {
		try {
			// 影响行数
			int add = ud.add(user);
			if (add > 0) {
				ResponseUtil.writeJson(resp, R.ok(0, "用户数据新增成功"));
			} else {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据查询失败"));
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return null;
	}

	// 删除
	public String del(HttpServletRequest req, HttpServletResponse resp) {
		try {
			// 影响行数
			int del = ud.del(user);
			if (del > 0) {
				ResponseUtil.writeJson(resp, R.ok(0, "用户数据删除成功"));
			} else {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			try {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		return null;
	}

	// 修改
	public String upd(HttpServletRequest req, HttpServletResponse resp) {
		try {
			// 影响行数
			int upd = ud.upd(user);
			if (upd > 0) {
				ResponseUtil.writeJson(resp, R.ok(0, "用户数据修改成功"));
			} else {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			try {
				ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
		}
		return null;
	}

	
	//查询用户的角色(权限)
	public String listUserRole(HttpServletRequest req, HttpServletResponse resp) {
		try {
			PageBean pageBean = new PageBean();
			pageBean.setRequest(req);
			List<Map<String, Object>> users = ud.listUserRole(user, pageBean);
			// layui 的code 返回一定要是 0,不能是200,否者返回不了数据
			ResponseUtil.writeJson(resp, R.ok(0, "查询成功", pageBean.getTotal(), users));
		} catch (Exception e) {
			e.printStackTrace();
			try {
				ResponseUtil.writeJson(resp, R.error(0, "查询失败"));
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}
		return null;
	}
	
	
	//查询所有
		public String list(HttpServletRequest req, HttpServletResponse resp) {
			try {
				PageBean pageBean = new PageBean();
				pageBean.setRequest(req);
				List<User> list = ud.list(user, pageBean);
				// layui 的code 返回一定要是 0,不能是200,否者返回不了数据
				ResponseUtil.writeJson(resp, R.ok(0, "查询成功", pageBean.getTotal(), list));
			} catch (Exception e) {
				e.printStackTrace();
				try {
					ResponseUtil.writeJson(resp, R.error(0, "查询失败"));
				} catch (Exception e1) {
					e1.printStackTrace();
				}
			}
			return null;
		}

	@Override
	public User getModel() {
		return user;
	}

}

四.温馨提示 

本文章中的layui需要引入2.4.5及以上版本的才能够运行,如果版本过低,则会报出下列错误

那为什么会报出这个错误呢?

因为`form.val()` 方法是在 layui 2.4.5 版本中引入的

在早期版本的 layui 中,并没有名为 `form.val()` 的方法。该方法的主要功能是用于为表单填充或获取数据。它接受两个参数,第一个参数是表单的 lay-filter 属性值,第二个参数是一个 json 对象,用于设置表单字段的值或获取表单字段的值。

如果你的 layui 版本较旧,或者你的代码中未正确引入 layui.form.js 文件,可能会出现 `form.val is not a function` 的错误。请检查你所使用的 layui 版本,并确保引入了正确的 layui.form.js 文件

      好啦,今天的分享就到这了,希望能够帮到你呢!😊😊           

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,下面是使用 Ajax 和 layui 实现动态表格增删改查的一个简单示例。 1. 引入 layui 首先需要在页面中引入 layui 的相关文件,例如: ```html <link rel="stylesheet" href="//cdn.layui.com/layui-v2.5.6/css/layui.css"> <script src="//cdn.layui.com/layui-v2.5.6/layui.js"></script> ``` 2. 表格的展示 接下来需要将表格展示在页面上,可以使用 layui 的 table 组件来创建表格。为了方便后续操作,可以给每一行的 tr 标签添加一个唯一的 id,例如: ```html <table id="table" lay-filter="table"></table> ``` ```javascript // 渲染表格 layui.use('table', function () { var table = layui.table; table.render({ elem: '#table', url: 'list.php', cols: [[ {field: 'id', title: 'ID'}, {field: 'name', title: '姓名'}, {field: 'age', title: '年龄'}, {fixed: 'right', title: '操作', toolbar: '#toolbar', width: 150} ]] }); // 监听工具条按钮点击事件 table.on('tool(table)', function (obj) { var data = obj.data; if (obj.event === 'edit') { // 编辑操作 editData(data); } else if (obj.event === 'delete') { // 删除操作 deleteData(data); } }); }); // 显示编辑模态框 function editData(data) { layui.use('layer', function () { var layer = layui.layer; layer.open({ type: 1, title: '编辑数据', area: ['500px', '300px'], content: $('#edit-form'), success: function () { // 将数据填充到编辑表单中 $('#edit-form input[name="id"]').val(data.id); $('#edit-form input[name="name"]').val(data.name); $('#edit-form input[name="age"]').val(data.age); } }); }); } // 删除操作 function deleteData(data) { layui.use('layer', function () { var layer = layui.layer; layer.confirm('确定删除该行数据吗?', function (index) { var url = 'delete.php?id=' + data.id; $.ajax({ type: 'GET', url: url, success: function (response) { layer.close(index); layui.table.reload('table'); }, error: function () { alert('删除数据失败'); } }); }); }); } ``` 3. 添加操作 当用户点击添加按钮时,需要显示一个模态框,让用户输入新数据。可以使用 layui 的 layer 组件来创建模态框,使用 jQuery 的 ajax() 方法来发送请求,将新数据添加到后端数据库中。例如: ```html <script type="text/html" id="toolbar"> <button class="layui-btn layui-btn-sm" lay-event="add">添加</button> </script> <div id="add-form" style="display: none;"> <form class="layui-form" lay-filter="add-form"> <div class="layui-form-item"> <label class="layui-form-label">姓名</label> <div class="layui-input-block"> <input type="text" name="name" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">年龄</label> <div class="layui-input-block"> <input type="text" name="age" class="layui-input"> </div> </div> </form> </div> <script> // 添加操作 layui.use(['layer', 'form'], function () { var layer = layui.layer; var form = layui.form; layui.table.on('toolbar(table)', function (obj) { if (obj.event === 'add') { layer.open({ type: 1, title: '添加数据', area: ['500px', '300px'], content: $('#add-form'), success: function () { // 清空表单数据 $('#add-form input[name="name"]').val(''); $('#add-form input[name="age"]').val(''); } }); } }); form.on('submit(add-form)', function (data) { $.ajax({ type: 'POST', url: 'add.php', data: data.field, success: function (response) { layer.closeAll(); layui.table.reload('table'); }, error: function () { alert('添加数据失败'); } }); return false; }); }); </script> ``` 4. 编辑操作 当用户点击编辑按钮时,需要将该行的数据加载到编辑模态框中,让用户进行修改。可以使用 layui 的 layer 组件来创建模态框,使用 jQuery 的 ajax() 方法来发送请求,更新后端数据库中的数据。例如: ```html <div id="edit-form" style="display: none;"> <form class="layui-form" lay-filter="edit-form"> <div class="
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是辉辉啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值