LayUI数据表格的使用指南

public Sort bulidSort() {

Order order2=new Order(Direction.fromString(order), sort);

Sort sort2=Sort.by(order2);

return sort2;

}

}

返回的DataGridUtils类中的方法是处理返回的数据为指定的JSON格式数据。

指定的JSON格式为。

DataGridUtils类代码如下。

public class DataGridUtils {

public static HashMap<String, Object> buildResult(Page page) {

HashMap<String, Object> result=new HashMap<>();

result.put(“code”, 0);

result.put(“msg”,“”);

result.put(“number”, page.getNumberOfElements());

result.put(“count”, page.getTotalElements());

result.put(“data”, page.getContent());

return result;

}

}

返回的JSON数据(只有返回的JSON数据格式一样数据就可以显示出来了)。

{

“msg”: “”,

“number”: 3,

“code”: 0,

“data”: [

{

“id”: 2,

“isUsed”: true,

“name”: “张三”,

“username”: “123456”,

“tbClass”: {

“id”: 1,

“name”: “软件工程1班”,

“teacher”: “张老师”

},

“grade”: 99.0

}, {

“id”: 3,

“isUsed”: null,

“name”: “刘备”,

“username”: “admin”,

“tbClass”: {

“id”: 1,

“name”: “软件工程1班”,

“teacher”: “张老师”

},

“grade”: null

}, {

“id”: 4,

“isUsed”: null,

“name”: “诸葛亮”,

“username”: “admin1”,

“tbClass”: {

“id”: 2,

“name”: “软件工程2班”,

“teacher”: “李老师”

},

“grade”: null

}

],

“count”: 3

}

数据返回后,就可以看到页面上显示的页面了。

上面是显示的单表数据,在实际开发中,常遇到关联表的数据显示。用以下方法可以显示关联表数据。

{field : ‘tbClass’, title : ‘班级’,

templet : function(d) { //d表格当前行的所有数据,如果班级对象不为空,就返回班级名称

return d.tbClass ? d.tbClass.name : ‘’;

}

},

数据显示完成后,下一步就是对数据的操作了(增删改查)。LayUI数据表格支持在表格上方自定义工具栏,也可以在每行后面定义操作按钮,先来看一下在表格上方定义工具栏。

定义增删改查工具栏代码。

注意:需要用script表格包裹起来,id用于绑定时使用,按钮上的lay-event属性用于监听按钮的操作。

之后在JS渲染代码中,通过toolbar属性绑定自定义的工具栏。

工具栏加载完成,页面显示。

工具栏添加后,可以通过以下方法,监听工具栏的点击事件,test为表格的id。

table.on(‘toolbar(test)’, function(obj){});

点击工具栏按钮,在控制台输出obj,可以发现,event的值,正是工具栏按钮中lay-event属性的值,可以通过他来判断点击的是哪个按钮,执行什么操作。

可以通过下面的代码获取到选中的数据,进行操作(删除修改)。

var checkStatus = table.checkStatus(‘student’);

var data = checkStatus.data;

点击新增按钮方法,打开一个layer弹框,显示新增表单,先请求后台拿到新增页面代码,之后弹框显示。弹框定义了两个按钮,确定取消,点击确定按钮会提交表单内容到后台进行保存操作。

$.post(“student/edit”, function(data){

layui.use(‘layer’, function(){

layer.open({

title: ‘学生管理’,

type: 1,

shade: 0.3,

maxmin: true,

content: data,

area: [‘500px’],

btn: [‘确定’, ‘取消’],

yes:function(){ //虚拟化表单参数类型不是json,所以这里用的是回调提交

},

//弹出层打开回调

success: function(layero, index){

var form=layui.form;

//找到确定按钮,添加属性,变成提交按钮

layero.addClass(‘layui-form’);

var submitBtn=layero.find(‘.layui-layer-btn0’);

submitBtn.attr(‘lay-filter’,‘formVerify’).attr(‘lay-submit’,‘’);

layero.keydown(function(e){

if(e.keyCode==13){

submitBtn.click();

}

});

form.on(‘submit(formVerify)’, function(data){

$.post(“student/save”, data.field, function(result){

if(result.success){

layer.close(index);

table.reload(‘student’,{where:that.where});

}

layer.msg(result.msg,{offset:‘rb’});

});

});

}

})

})

})

后台edit方法,请求新增修改页面代码,因为关联的有班级,所以把所有的班级查询出来传递到前台。新增和修改公用的一个方法和页面,用id作为区分的。

@Override

public void edit(StudentForm form, ModelMap map) throws InstantiationException, IllegalAccessException {

map.put(“tbClass”, tbClassService.findAll());

Student model = new Student();

Integer id = form.getId();

if(id!=null) {

model=studentService.findById(id);

}

map.put(“model”, model);

}

edit页面代码,model为传递过来的对象,如果是新增就为null,修改就显示修改的值。

班级名称

后台保存方法。

@RequestMapping(value=“/save”)

@ResponseBody

public Object save(StudentForm form) throws InstantiationException, IllegalAccessException {

try {

Student model=new Student();

Integer id = form.getId();

if(id!=null) {

model=studentService.findById(id);

}

BeanUtils.copyProperties(form, model,“id”);

studentService.save(model);

return new AjaxResult(“数据保存成功”);

} catch (Exception e) {

return new AjaxResult(false,“数据保存失败”);

}

}

其中接收参数的StudentForm类中和实体类字段一样,通过id是否为null来判断是修改还是新增。AjaxResult是方法执行完成后,返回前台的一个类代码如下。

public class AjaxResult {

private Boolean success;

private String msg;

public Boolean getSuccess() {

return success;

}

public void setSuccess(Boolean success) {

this.success = success;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public AjaxResult(String msg) {

super();

this.success=true;

this.msg = msg;

}

public AjaxResult(Boolean success, String msg) {

super();

this.success = success;

this.msg = msg;

}

public AjaxResult(boolean success) {

this.success=success;

}

@SuppressWarnings(“rawtypes”)

public static HashMap<String, Object> bulidPageResult(Page page) {

HashMap<String, Object> result=new HashMap<>();

result.put(“total”, page.getTotalElements());

result.put(“rows”, page.getContent());

return result;

}

}

效果如下。

修改部分JS代码,修改需要先判断一下是否勾选了,勾选一行才能执行修改操作。

if(data.length != 1){

layer.msg(‘请选择一行进行编辑’, {offset: ‘rb’});

}else{

var id = data[0].id;

$.post(“student/edit”, {id: id}, function(data){

layui.use(‘layer’, function(){

layer.open({

title: ‘学生管理’,

type: 1,

shade: 0.3,

maxmin: true,

content: data,

area: [‘500px’],

btn: [‘确定’, ‘取消’],

yes:function(){

},

success: function(layero, index){

var form=layui.form;

layero.addClass(‘layui-form’);

var submitBtn=layero.find(‘.layui-layer-btn0’);

submitBtn.attr(‘lay-filter’,‘formVerify’).attr(‘lay-submit’,‘’);

layero.keydown(function(e){

if(e.keyCode==13){

submitBtn.click();

}

});

form.on(‘submit(formVerify)’, function(data){

$.post(“student/save”, data.field, function(result){

if(result.success){

layer.close(index);

table.reload(‘student’,{where:that.where});

}

layer.msg(result.msg,{offset:‘rb’});

});

});

}

})

})

});

}

因为修改和新增都是公用的一个方法,所以后台,页面都和新增的方法一样,下面看一下效果图。

删除方法,JS部分代码,删除相对来说就简单很多了,只需要把选中的行id拼接起来,传递到后台进行删除就可以了。

if(data.length < 1){

layer.msg(‘请选择需要删除的行’, {offset: ‘rb’});

}else{

layer.confirm(‘确定要删除选中的’+data.length+‘条数据吗?’, function(index) {

var str = “”;

for(i = 0; i < data.length; i++){

str += data[i].id+“,”;

}

str = str.substring(0, str.length-1);

$.post(“student/delete1”, {ids: str}, function(result){

table.reload(‘student’,{where:that.where});

layer.close(index);

layer.msg(result.msg,{offset:‘rb’});

});

});

}

后台删除方法。

@RequestMapping(value = “delete1”)

@ResponseBody

public Object delete(String ids) {

try {

String[] split = ids.split(“,”);

for(int i = 0; i < split.length; i++) {

studentService.deleteById(Integer.parseInt(split[i]));

}

return new AjaxResult(“数据删除成功”);

} catch (Exception e) {

return new AjaxResult(false,“数据删除失败”);

}

}

最后就是刷新方法了,刷新也是最简单的。只有执行table.reload(‘student’, {where:that.where});方法,刷新表格,重新加载一下数据就可以了。

增删改查,就差一个查询了查询方法你可以同上面新增和修改方法一样用一个弹框显示查询条件也可以,也可以在表格上方定义查询表单,这里案例是在表格上方定义的查询表单。

在表格上方加上下面的代码,查询表单。

查询

清空

效果如下。

查询方法,查询只需要把查询条件带上,之后刷新表格,后台加载表格数据时,判断查询条件是否为null,不为null就条件查询数据返回即可。查询条件放在where变量中,刷新表格时带上where参数即可。

$.fn.serializeObject = function(){ //序列化表单数据

var o = {};

var a = this.serializeArray();

$.each(a, function() {

if (o[this.name] !== undefined) {

if (!o[this.name].push) {

o[this.name] = [o[this.name]];

}

o[this.name].push(this.value || ‘’);

} else {

o[this.name] = this.value || ‘’;

}

});

return o;

};

function search(){

layui.use(“table”, function(){

var table = layui.table;

where = $(“#myForm”).serializeObject();

table.reload(‘student’, {where: where});

});

}

清空查询方法,把查询条件where清空,不带参数刷新表格就是全部数据了,之后还需要把查询表单的数据清空一下。

function empty(){

where=“”;

$(“input”).val(“”);

layui.use([‘form’, ‘table’], function(){

var form = layui.form;

var table = layui.table;

form.render();

table.reload(‘student’, {where: ‘’});

});

}

增删改查基本都实现了。但操作按钮都是是表格上方工具栏中,下面来看一下在表格中定义操作按钮。

和在表格上面工具栏中定义一样,需要先定义显示在表格中的操作按钮。

注意:需要用script表格包裹起来,id用于绑定时使用,按钮上的lay-event属性用于监听按钮的操作。

在JS渲染表格时,添加操作列,通过id绑定操作代码块。

{field: ‘relationName’, toolbar: ‘#barDemo’, title: ‘操作’ }

页面显示效果如图。

通过table.on(‘tool(student)’, function(obj) {});方法监听表格内工具栏的点击事件。

通过var data = obj.data;获取当前行的数据。

JS部分代码。

table.on(‘tool(student)’, function(obj) {

var data = obj.data;

if (obj.event === ‘updata’) {

$.post(“student/edit”, {id: data.id}, function(data){

layui.use(‘layer’, function(){

layer.open({

title: ‘学生管理’,

type: 1,

shade: 0.3,

maxmin: true,

content: data,

area: [‘500px’],

btn: [‘确定’, ‘取消’],

yes:function(){

},

success: function(layero, index){

var form=layui.form;

layero.addClass(‘layui-form’);

var submitBtn=layero.find(‘.layui-layer-btn0’);

submitBtn.attr(‘lay-filter’,‘formVerify’).attr(‘lay-submit’,‘’);

layero.keydown(function(e){

if(e.keyCode==13){

submitBtn.click();

}

});

form.on(‘submit(formVerify)’, function(data){

$.post(“student/save”, data.field, function(result){

if(result.success){

layer.close(index);

table.reload(‘student’,{where:that.where});

}

layer.msg(result.msg,{offset:‘rb’});

});

});

}

})

})

});

}else if(obj.event === ‘delete’){

layer.confirm(‘确定要删除吗?’, function(index) {

$.post(“student/delete”, {id: data.id}, function(result){

table.reload(‘student’,{where:that.where});

layer.close(index);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

image

(2)刷的算法题(还有左神的算法笔记)

image

(3)面经+真题解析+对应的相关笔记(很全面)

image

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
入阿里一直到现在。**

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-ZMU6zDVX-1713461639530)]

[外链图片转存中…(img-OSckVrUF-1713461639532)]

[外链图片转存中…(img-FCzIawJI-1713461639532)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后希望可以帮助到大家!

千千万万要记得:多刷题!!多刷题!!

之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!

篇幅有限,以下只能截图分享部分的资源!!

(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)

[外链图片转存中…(img-1Cop96nJ-1713461639533)]

(2)刷的算法题(还有左神的算法笔记)

[外链图片转存中…(img-mnmVPnwC-1713461639534)]

(3)面经+真题解析+对应的相关笔记(很全面)

[外链图片转存中…(img-w9miIaob-1713461639535)]

(4)视频学习(部分)

ps:当你觉得学不进或者累了的时候,视频是个不错的选择

在这里,最后只一句话:祝大家offer拿到手软!!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

form表单元素包括:text 文本输入框,password密码输入框,checkbox复选框,radio单选框,file 文件域,submit表单提交action指向的文件,reset表单清空,image图片提交按钮,button按钮,hidden隐藏域。 select option select 实现下拉选 callback 是回调函数 layui.模块   模块可以是layui已经存在的模块,也可以通过layui.define([mods], callback) 来自己自定义模块。 如果想要使用模块首先要做的必然是加载模块,layui.use(['laypage', 'layedit'], function(){}); 接下来使用layui风格控件  其实感觉layui帮我们定义好了CSS和许多JS文本,我们需要做的只是按照layui的命名规范选好样式进而使用就可以了。  layu官方文档的命名规范为: CSS命名规范 class命名前缀:layui,连接符:-,如:class="layui-form" 命名格式一般分为两种: 一:layui-模块名-状态或类型 二:layui-状态或类型 因为有些类并非是某个模块所特有,他们通常会是一些公共类。如: 一(定义按钮的原始风格):class="layui-btnlayui-btn-primary" 二(定义内联块状元素):class="layui-inline" 1 2 3 4 5 6 7 8 9 当然还有前面提到的使用模块的js代码: layui.use(['form', 'layedit', 'laydate'], function(){   var form = layui.form   ,layer = layui.layer   ,layedit = layui.layedit   ,laydate = layui.laydate;   //日期   laydate.render({     elem: '#date'   });   laydate.render({     elem: '#date1'   });   //创建一个编辑器   var editIndex = layedit.build('LAY_demo_editor');   //自定义验证规则   form.verify({     title: function(value){       if(value.length < 5){         return '标题至少得5个字符啊';       }     }     ,pass: [/(.+){6,12}$/, '密码必须6到12位']     ,content: function(value){       layedit.sync(editIndex);     }   });   //监听指定开关   form.on('switch(switchTest)', function(data){     layer.msg('开关checked:'+ (this.checked ? 'true' : 'false'), {       offset: '6px'     });     layer.tips('温馨提示:请注意开关状态的文字可以随意定义,而不仅仅是ON|OFF', data.othis)   });   //监听提交   form.on('submit(demo1)', function(data){     layer.alert(JSON.stringify(data.field), {       title: '最终的提交信息'     })     return false;   }); }); 下面我们按照官方文档的开发规范使用一下form表单的例子       表单集合演示           单行输入框                       验证必填项                             验证手机                                   验证邮箱                                       多规则验证                                   验证日期                                   验证链接                                 验证身份证                       自定义验证                   请填写6到12位密码               范围                           -                                 单行选择框                   </opt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值