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. 数据展示和比较:
    • 数据表格可以将多个数据源或多个维度的数据进行对比和展示。它可以根据需求设置可排序、可筛选的列,帮助用户对数据进行比较和分析

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

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

效果展示

①新增 

LayUi之数据表格的增删改查(内含完整源代码)_第1张图片

②删除

LayUi之数据表格的增删改查(内含完整源代码)_第2张图片

③修改

LayUi之数据表格的增删改查(内含完整源代码)_第3张图片

项目层级

LayUi之数据表格的增删改查(内含完整源代码)_第4张图片

表结构

LayUi之数据表格的增删改查(内含完整源代码)_第5张图片

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

LayUi之数据表格的增删改查(内含完整源代码)_第6张图片

实体类

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

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 
 */
public class BaseDao {

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

		List> 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 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 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 executeQuery(String sql, Class clz, PageBean pageBean) throws Exception {
		List 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();
		}

		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" %>






 
用户管理


	
	

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
        ]]
    });
	
	//在页面中的中必须配置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"%>





用户新增



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(){
	//
//取 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 {
	//增加
	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 BaseDao中的这一个方法
//当实体类的属性与数据库的字段不同使用➡List>(可能有一个数据库中没有的字段,比如下面的这个给通过行转列查出角色名的方法,也可能是连表查询出来的字段,总之就是数据库字段与实体类属性值不对等的情况下使用)
public List> 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 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 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 {
	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> 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 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 文件

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

你可能感兴趣的:(LayUi,layui,前端,javascript)