layui資料表格搜尋

語言: CN / TW / HK

簡單介紹

我是通過Servlet傳遞json給layui資料表格模組,實現遍歷操作的,不過資料量大的話還是需要搜尋功能的。這是我參考網上大佬程式碼寫出的搜尋功能。

實現原理

要實現搜尋功能,肯定需要連結資料庫並在資料庫根據相應的欄位查詢,把查詢結果再返回到layui資料表格,因為需要展示我們在資料庫查詢到的資料,所以需要過載表格,也就是隻重新整理一下表格。

實現方法

首先獲取到自己的搜尋框的資料,把資料傳到過載模組的where中傳到後臺,給搜尋設定點選事件,通過url把where中的搜尋框內容以json形式傳遞到Servlet中,Servlet呼叫dao層的查詢方法,最後Servlet把從資料庫搜尋到的資料通過json形式傳遞給layui資料表格。

原始碼

index.html

<html>
<head>
    <meta charset="utf-8">
    <title>學生資訊表</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">
    <script type="text/javascript" src="js/vue.min.js"></script>
    <script src="js/jquery-3.3.1.js"></script>
    <script src="layui/layui.js" charset="utf-8"></script>
    <link rel="stylesheet" href="layui/css/layui.css" tppabs="http://res.layui.com/layui/dist/css/layui.css"  media="all">
</head>
<body>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
    <legend>學生資訊表</legend>
</fieldset>

<table class="layui-hide" id="test" lay-filter="test">

</table>

<script type="text/html" id="toolbarDemo">
    <div class="demoTable">
        搜尋ID:
        <div class="layui-inline">
            <input class="layui-input" name="id" id="demoReload" autocomplete="off">
        </div>
        <button class="layui-btn" type="button" id="search_btn" data-type="reload">搜尋</button>
    </div>

</script>

<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>
</script>

<script>

</script>

<script>
    layui.use('table', function(){
        var table = layui.table;
        var $  = layui.jquery;
        table.render({
            elem: '#test'
            ,url:'ShowAllServlet'
            ,toolbar: '#toolbarDemo' //開啟頭部工具欄,併為其繫結左側模板
            ,defaultToolbar: ['filter', 'exports', 'print', { //自定義頭部工具欄右側圖示。如無需自定義,去除該引數即可
                title: '提示'
                ,layEvent: 'LAYTABLE_TIPS'
                ,icon: 'layui-icon-tips'
            }]
            ,title: '使用者資料表'
            ,id: 'test'
            ,cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field:'id', title:'ID', width:320,  unresize: true, sort: true}
                ,{field:'name', title:'姓名',  width:320, edit: 'text'}
                ,{field:'sex', title:'性別', width:320, edit: 'text'}
                ,{field:'birthday', title:'出生日期',  width:320,edit: 'text'}
                ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:200}
            ]]
            ,page: true
        });

        $(document).on('click','#search_btn',function (data) {
            var search =  $('#demoReload');    //search是jQuery獲取的輸入框物件
            table.reload('test',{
                where:{
                    id : search.val()        //where裡面是傳遞到後臺的值,我傳遞的是學生的學號id
                },
                url:'SelectServlet'      //url寫你自己的servlet,這個servlet要接受where傳遞的資料並返回從資料庫搜尋的資料。
                ,
                page: {
                    curr:1          //這裡不用改,意思是從第一頁開始過載表格
                }
            });
            
        });
//監聽行工具事件 del
        table.on('tool(test)', function(obj){
            var data = obj.data;
            console.log(obj.data.id);
            console.log(obj.data.name);
            console.log(obj.data.sex);
            console.log(obj.data.birthday);
            //console.log(obj)
            if(obj.event === 'del'){
                layer.confirm('真的刪除行麼', function(index){
                    $.ajax({
                        url: "DeleteServlet",
                        type: "POST",
                        data: {id: data.id},
                        success: function (msg) {
                                if (msg == "ok") {
                                //刪除這一行
                                obj.del();
                                //關閉彈框
                                layer.close(index);
                                    layer.msg('刪除成功!',function() {time:2000})
                            } else {
                                layer.msg("刪除失敗", function() {time:2000});
                            }
                        }
                    });
                    return false;
                });
            } else if(obj.event === 'edit'){
                layer.confirm('更改為以下資訊<br>'+ '<br>姓名: '+ data.name +'<br>性別: ' +data.sex +'<br>出生日期: ' +data.birthday, function(index){
                    $.ajax({
                        url: "UpdateServlet",
                        type: "POST",
                        data: {id: data.id,name: data.name,sex: data.sex,birthday: data.birthday},
                        success: function (msg) {
                            if (msg == "ok") {
                                //刪除這一行

                                //關閉彈框
                                layer.close(index);
                                layer.msg('修改成功!',function() {time:2000})
                            } else {
                                layer.msg("修改失敗", function() {time:2000});
                            }
                        }
                    });
                    return false;
                });
            }
        });
    });
</script>

</body>
</html>

SelectServlet.java(Servlet)

import COM.Bean.student;
import COM.Dao.mannger;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

@WebServlet(name = "SelectServlet", value = "/SelectServlet")
public class SelectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");//設定相應的文字型別
        response.setContentType("text/html;charset=utf-8");//設定響應型別,並防止中文亂碼
        ArrayList<student> stulist = new ArrayList<>();
        mannger dao = new mannger();
        String id = request.getParameter("id");           //接收where中的id欄位
        dao.select(stulist,id);
        int count1 = stulist.size();
        String count = ""+ count1;
        Map<String, Object> result = new HashMap<String, Object>();       //下面是把arraylist轉成layui需要的json形式。
      //System.out.println(paperslist);
        result.put("code", 0);
        result.put("msg", "");
        result.put("count",count);
        result.put("data",stulist);
        System.out.println(result);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString (result);
        response.getWriter().print(json.toString());
        System.out.println(result);
    }
}

效果截圖

到這裡就結束了,有不懂的可以私信哦。