使用LayUI操作數據表格

接着 上一篇 繼續完善我們的demo,這次我們加一個搜索按鈕

搜索

 

table標籤的上方,加入這樣一組html

 

<div class="demoTable">
    搜索商戶:
    <div class="layui-inline">
        <input class="layui-input" name="keyword" id="demoReload" autocomplete="off">
    </div>
    <button class="layui-btn" data-type="reload">搜索</button>
</div>

 

js加入初始化代碼和定義加載方法

layui.use('table', function(){
    var table = layui.table;

    //方法級渲染
    table.render({
        elem: '#LAY_table_user'
        ,url: 'UVServlet'
        ,cols: [[
            {checkbox: true, fixed: true}
            ,{field:'id', title: 'ID', width:80, sort: true, fixed: true}
            ,{field:'aid', title: '商戶', width:80, sort: true}
            ,{field:'uv', title: '訪問量', width:80, sort: true,edit:true}
            ,{field:'date', title: '日期', width:180}
            ,{field:'datatype', title: '日期類型', width:100}

        ]]
        ,id: 'testReload'
        ,page: true
        ,height: 600
    });

    var $ = layui.$, active = {
        reload: function(){
            var demoReload = $('#demoReload');

            table.reload('testReload', {
                where: {
                    keyword: demoReload.val()
                }
            });
        }
    };
)};

 

綁定click點擊事件

$('.demoTable .layui-btn').on('click', function(){
    var type = $(this).data('type');
    active[type] ? active[type].call(this) : '';
});

此時點擊查詢按鈕,會將keyword這個關鍵字傳到後端,接下來就是自己處理查詢關鍵字業務了。

到目前爲止,搜索也有了,分頁也有了,對了,分頁會自動傳到後端page,limit2個值到後臺,相當於(pageindex,pagesize

預覽下效果

看看請求的參數

 

 從參數可以看出,數據表格默認是get請求,返回的數據結構是這樣的 

給表格增加操作按鈕

首先加入一組html,放到table標籤下面,代碼如下

<table class="layui-hide" id="LAY_table_user" lay-filter="useruv"></table>
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-primary layui-btn-mini" lay-event="detail">查看</a>
    <a class="layui-btn layui-btn-mini" lay-event="edit">編輯</a>
    <a class="layui-btn layui-btn-danger layui-btn-mini" lay-event="del">刪除</a>
</script>

然後在js中指定工具條

 //方法級渲染
        table.render({
            elem: '#LAY_table_user'
            ,url: 'UVServlet'
            ,cols: [[
                {checkbox: true, fixed: true}
                ,{field:'id', title: 'ID', width:80, sort: true, fixed: true}
                ,{field:'aid', title: '商戶', width:80, sort: true}
                ,{field:'uv', title: '訪問量', width:80, sort: true,edit:true}
                ,{field:'date', title: '日期', width:180}
                ,{field:'datatype', title: '日期類型', width:100}
                ,{field:'right', title: '操作', width:177,toolbar:"#barDemo"}
            ]]
            ,id: 'testReload'
            ,page: true
            ,height: 600
        });

界面效果如下

 

 接下來需要給按鈕綁定事件,來完成功能操作

LayUI裏面,一般採用table.on()來表示事件,例如這個

 

//監聽表格複選框選擇
        table.on('checkbox(useruv)', function(obj){
            console.log(obj)
        });

 

我勾選一個複選框,就打印一個日誌

 

加入以下js代碼,來綁定工具條事件

//監聽工具條
  table.on('tool(demo)', function(obj){
    var data = obj.data;
    if(obj.event === 'detail'){
      layer.msg('ID:'+ data.id + ' 的查看操作');
    } else if(obj.event === 'del'){
      layer.confirm('真的刪除行麼', function(index){
        obj.del();
        layer.close(index);
      });
    } else if(obj.event === 'edit'){
      layer.alert('編輯行:<br>'+ JSON.stringify(data))
    }
  });

這時候,點擊按鈕就會有反應了。這裏說明一下

 

接下來就是把數據傳遞到後端,直接將js改造如下

 

//監聽工具條
table.on('tool(useruv)', function(obj){
    var data = obj.data;
    if(obj.event === 'detail'){
        layer.msg('ID:'+ data.id + ' 的查看操作');
    } else if(obj.event === 'del'){
        layer.confirm('真的刪除行麼', function(index){
            console.log(data);
            $.ajax({
                url: "UVServlet",
                type: "POST",
                data:{"uvid":data.id,"memthodname":"deleteuv","aid":data.aid},
                dataType: "json",
                success: function(data){

                    if(data.state==1){
                       //刪除這一行
                        obj.del();
                       //關閉彈框
                        layer.close(index);
                        layer.msg("刪除成功", {icon: 6});
                    }else{
                        layer.msg("刪除失敗", {icon: 5});
                    }
                }

            });
        });
    } else if(obj.event === 'edit'){

        layer.prompt({
            formType: 2
            ,title: '修改 ID 爲 ['+ data.id +'] 的訪問量'
            ,value: data.uv
        }, function(value, index){
         //這裏一般是發送修改的Ajax請求
            EidtUv(data,value,index,obj);
            


        });



    }
});

編輯的方法
function  EidtUv(data,value,index,obj) {
    $.ajax({
        url: "UVServlet",
        type: "POST",
        data:{"uvid":data.id,"memthodname":"edituv","aid":data.aid,"uv":value},
        dataType: "json",
        success: function(data){

            if(data.state==1){
               //關閉彈框
                layer.close(index);
                //同步更新表格和緩存對應的值
                obj.update({
                    uv: value
                });
                layer.msg("修改成功", {icon: 6});
            }else{
                layer.msg("修改失敗", {icon: 5});
            }
        }

    });
}
View Code

 

 

預覽效果

 

至此,數據表格的綁定、展示、分頁、搜索、查看、編輯、刪除、排序 功能都已經完成,是不是很簡單?

此處粘貼出完整的頁面代碼

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <link rel="stylesheet" href="../Assets/css/layui.css">


    <!-- 注意:如果你直接複製所有代碼到本地,上述css路徑需要改成你本地的 -->
</head>
<body>
<div style="margin-bottom: 5px;">

    <!-- 示例-970 -->
    <ins class="adsbygoogle" style="display:inline-block;width:700px;height:700px" data-ad-client="ca-pub-6111334333458862" data-ad-slot="3820120620"></ins>

</div>
<div class="demoTable">
    搜索商戶:
    <div class="layui-inline">
        <input class="layui-input" name="keyword" id="demoReload" autocomplete="off">
    </div>
    <button class="layui-btn" data-type="reload">搜索</button>
</div>

<table class="layui-hide" id="LAY_table_user" lay-filter="useruv"></table>
<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-primary layui-btn-mini" lay-event="detail">查看</a>
    <a class="layui-btn layui-btn-mini" lay-event="edit">編輯</a>
    <a class="layui-btn layui-btn-danger layui-btn-mini" lay-event="del">刪除</a>
</script>


<script src="../Assets/layui.js"></script>
<script>
    layui.use('table', function(){
        var table = layui.table;

        //方法級渲染
        table.render({
            elem: '#LAY_table_user'
            ,url: 'UVServlet'
            ,cols: [[
                {checkbox: true, fixed: true}
                ,{field:'id', title: 'ID', width:80, sort: true, fixed: true}
                ,{field:'aid', title: '商戶', width:80, sort: true}
                ,{field:'uv', title: '訪問量', width:80, sort: true,edit:true}
                ,{field:'date', title: '日期', width:180}
                ,{field:'datatype', title: '日期類型', width:100}
                ,{field:'right', title: '操作', width:177,toolbar:"#barDemo"}
            ]]
            ,id: 'testReload'
            ,page: true
            ,height: 600
        });

        var $ = layui.$, active = {
            reload: function(){
                var demoReload = $('#demoReload');

                table.reload('testReload', {
                    where: {
                        keyword: demoReload.val()
                    }
                });
            }
        };



        //監聽表格複選框選擇
        table.on('checkbox(useruv)', function(obj){
            console.log(obj)
        });
        //監聽工具條
        table.on('tool(useruv)', function(obj){
            var data = obj.data;
            if(obj.event === 'detail'){
                layer.msg('ID:'+ data.id + ' 的查看操作');
            } else if(obj.event === 'del'){
                layer.confirm('真的刪除行麼', function(index){
                    console.log(data);
                    $.ajax({
                        url: "UVServlet",
                        type: "POST",
                        data:{"uvid":data.id,"memthodname":"deleteuv","aid":data.aid},
                        dataType: "json",
                        success: function(data){

                            if(data.state==1){
                                obj.del();
                                layer.close(index);
                                layer.msg("刪除成功", {icon: 6});
                            }else{
                                layer.msg("刪除失敗", {icon: 5});
                            }
                        }

                    });
                });
            } else if(obj.event === 'edit'){

                layer.prompt({
                    formType: 2
                    ,title: '修改 ID 爲 ['+ data.id +'] 的訪問量'
                    ,value: data.uv
                }, function(value, index){
                    EidtUv(data,value,index,obj);
                   


                });



            }
        });

        $('.demoTable .layui-btn').on('click', function(){
            var type = $(this).data('type');
            active[type] ? active[type].call(this) : '';
        });

        function  EidtUv(data,value,index,obj) {
            $.ajax({
                url: "UVServlet",
                type: "POST",
                data:{"uvid":data.id,"memthodname":"edituv","aid":data.aid,"uv":value},
                dataType: "json",
                success: function(data){

                    if(data.state==1){

                        layer.close(index);
                        //同步更新表格和緩存對應的值
                        obj.update({
                            uv: value
                        });
                        layer.msg("修改成功", {icon: 6});
                    }else{
                        layer.msg("修改失敗", {icon: 5});
                    }
                }

            });
        }


    });
</script>
</body>
</html>
View Code

 

 應大家要求,將servlet代碼貼出來,其中用到了json.jar

import com.weimob.models.Pagination;
import com.weimob.models.QueryResult;
import com.weimob.models.UvData;
import com.weimob.uv.dao.WeiMobUvDao;
import org.json.JSONArray;
import org.json.JSONObject;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@WebServlet(name="UVServlet",
        urlPatterns={"/WebApp/UVServlet"},
        loadOnStartup=0)
public class UVServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String memthodname = request.getParameter("memthodname");
        if(memthodname!=null){
            switch (memthodname){
                case "queryList":
                    break;
                case "deleteuv":
                    deleteUv(request,response);
                    break;
                case "edituv":
                    edituv(request,response);
                    break;
                default:
                    queryList(request, response);
            }

        }else {
            queryList(request, response);

        }


    }

    private void queryList(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {


        String str = request.getParameter("keyword");
        String pindex = request.getParameter("page");
        String limit = request.getParameter("limit");
        response.setStatus(200);
        int aid = 0;
        int pagesize=15;
        int index = 0;
        int total = 0;
        if (str != null && str.length() > 0) {
            aid = Integer.valueOf(str);

        }
        if (pindex != null) {
            index = Integer.parseInt(pindex);
            pagesize=Integer.parseInt(limit);
        }


        WeiMobUvDao dao = new WeiMobUvDao();

        StringBuffer sbtotal = new StringBuffer();
        sbtotal.append("SELECT count(1) as count FROM WpMulShopDataUv_1 ");
        if (aid > 0) {
            sbtotal.append(" where aid=");
            sbtotal.append(aid);

        }
        total = dao.GetCount(sbtotal.toString());
        if (total > 0) {

            StringBuffer sb = new StringBuffer();
            sb.append("SELECT Id,AId,Uv,DataType,Date FROM WpMulShopDataUv_1 ");
            if (aid > 0) {
                sb.append(" where aid=");
                sb.append(aid);

            }
            if (total > pagesize) {
                sb.append(" Limit ");
                int start = (index - 1) * pagesize;
                if (start < 0) {
                    start = 0;

                }
                sb.append(start);
                sb.append(",");
                sb.append(pagesize);
            }

            List<UvData> list = dao.QueryUv(sb.toString());

            QueryResult<UvData> result = new QueryResult<UvData>(total, list);

            String jsonstr= ConvertListToPageJson(list,total);
            System.out.println(jsonstr);
           request.setAttribute("result", jsonstr);
            response.getWriter().print(jsonstr);

        }else {
            QueryResult<UvData> result = new QueryResult<UvData>(total, null);
            JSONObject obj = new JSONObject(result);
            response.getWriter().print(obj);

        }





}

    private void deleteUv(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {


        String str = request.getParameter("aid");
        String uvid = request.getParameter("uvid");
        String limit = request.getParameter("limit");
        response.setStatus(200);
        int aid = 0;
        int uv_id=0;
        int index = 0;
        int total = 0;
        if (str != null && str.length() > 0) {
            aid = Integer.valueOf(str);

        }
        if (uvid != null) {
            uv_id = Integer.parseInt(uvid);
        }
       if(uv_id<=0){
           response.getWriter().print("參數無效");
       }

        WeiMobUvDao dao = new WeiMobUvDao();

        List list=new ArrayList<Integer>();
        list.add(uv_id);
        int res_count= dao.DeleteByIds(aid,list);

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("state",res_count>0?true:false);
        jsonObject.put("code",0);
        jsonObject.put("msg","null");
        response.getWriter().print(jsonObject);







    }

    private void edituv(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {


        String str = request.getParameter("aid");
        String uvid = request.getParameter("uvid");
        String uvstr = request.getParameter("uv");
        response.setStatus(200);
        JSONObject jsonObject = new JSONObject();
        int aid = 0;
        int uv_id=0;
        int uv = 0;
        if (str != null && str.length() > 0) {
            aid = Integer.valueOf(str);

        }
        if (uvid != null) {
            uv_id = Integer.parseInt(uvid);
            uv= Integer.parseInt(uvstr);
        }
        if(uv_id<=0){
            response.setStatus(500);
            jsonObject.put("state",-1);
            jsonObject.put("msg","參數無效");
            response.getWriter().print(jsonObject);

        }
        if(uv<0){
            response.setStatus(500);
            jsonObject.put("state",-1);
            jsonObject.put("msg","參數無效");
            response.getWriter().print(jsonObject);
        }
        WeiMobUvDao dao = new WeiMobUvDao();

        List list=new ArrayList<Integer>();
        list.add(uv_id);
        UvData res= dao.getByIds(aid,uv_id);
        if(res==null){
            response.setStatus(500);
            jsonObject.put("state",-1);
            jsonObject.put("msg","參數無效,對象不存在");
            response.getWriter().print(jsonObject);
            return;
        }
         int res_count= dao.modifyEntity(res);

        jsonObject.put("state",res_count>0?true:false);
        jsonObject.put("code",0);
        jsonObject.put("msg","null");
        response.getWriter().print(jsonObject);
    }
    public  String ConvertListToPageJson(List<?> list, int countList) {
        // 新建一個json數組
        JSONArray jsonArray = new JSONArray();
        // 新建一個json對象
        JSONObject jsonObject = null;
        // 遍歷泛型集合
        for (Object object : list) {
            jsonObject = new JSONObject(object);
            jsonArray.put(jsonObject);
        }
        // 轉換數據格式
        String json = jsonArray.toString();
        // 拼接字符串
        StringBuffer sb = new StringBuffer();
        sb.append("{\"count\":");
        sb.append(countList);
        sb.append(",\"code\":");
        sb.append(0);
        sb.append(",\"msg\":");
        sb.append("null");
        sb.append(",\"data\":");
        sb.append(json);
        sb.append("}");
        String jsonString = sb.toString();
        return jsonString;
    }
}
View Code

 

 

 

package com.example.demo.data.models;

import com.alibaba.fastjson.annotation.JSONField;

public class Uv {
    private int id;
    @JSONField(name="aid")
    public long getaId() {
        return aId;
    }

    public void setAId(long aId) {
        this.aId = aId;
    }

    private long aId;
    @JSONField(name="shopid")
    public long getShopId() {
        return shopId;
    }

    public void setShopId(long shopId) {
        this.shopId = shopId;
    }

    private long shopId;
    @JSONField(name="date")
    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    private String date;
    @JSONField(name="uv")
    public int getUv() {
        return uv;
    }

    public void setUv(int uv) {
        this.uv = uv;
    }

    private int uv;
    @JSONField(name="id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    @JSONField(name="datetype")
    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

    private String dataType;
}

 

  

靜態文件下載地址

不少同學不知道怎麼綁定數據源,歡迎看我上一篇。表格數據源格式:http://www.layui.com/demo/table/user/?page=1&limit=30

總結:

LayUI爲我們提供了強大豐富的類庫組件,完善的文檔,學習成本和開發成本相對低廉,具有快速,扁平化等優點。

關於數據表格的介紹就到這裏。官方文檔

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章