动态综合条件查询+嵌套结构

    动态添加条件,有并,或、根据你输入的字段以及选择的属性,来进行查询,查询的方式有精确查询、模糊查询。

  下面的分页是layui-table实现的,是上一篇实现的。也可以不用,这只是你查出来的数据现实的一个样式而已。

    先看效果图:

 

 

  前端实现代码:(你要是不用layui的话就给查询的点击事件做一个ajax的数据传输,不用里面的table-render)

页面的设计是有一个固定着的查询条件,点击加号可以添加查询条件,第二个输入框的内容是根据你自己的查询条件的实际情况来写的。

  思路:设置一个变量k=1,每次点击添加以后,生成一个查询条件,值后k的值自增1,根据k的值有个for循环,你自己可以设置最多可以添加几个查询条件。每次点击添加,出来的查询条件标签是写在添加的点击事件之中的。

  查询的时候获取你的文本框的值,存在一个json数组之中,发往你请求的地址。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</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="layui/css/layui.css"  media="all">
</head>
<body>
    <!--工具栏-->

 <!-- 综合查询开始 -->
 
 <div class="wrap-container clearfix">
    <div class="column-content-detail">
        <div class="layui-inline tool-btn">
            <button class="layui-btn layui-btn-small layui-btn-normal addBtn" id="add"><i class="layui-icon">&#xe654;</i></button>
        </div>
        <div id="addCondition">
            <div id='0'>
                <div class='layui-inline' style="padding-left: 43px">
                    <select lay-filter='status' id='two0'>
                        <option value='companyname'>机构全称</option>
                        <option value='belongcom'>归口管理单位</option>
                        <option value='belongarea'>所在地域</option>
                        <option value='lawperson'>法人代表</option>
                        <option value='contacts'>联系人</option>
                        
                        <option value='techname'>技术需求名称</option>
                        <option value='keyword'>关键字</option>
                        <option value='money'>拟投入资金总额</option>
                       
                        <option value='subject'>学科分类</option>
                        <option value='domain'>需求技术所属领域</option>
                        <option value='vocation'>需求技术应用行业</option>
                        <option value='office'>管理处室</option>
                    </select>
                </div>
                <div class='layui-inline'>
                    <input type='text' id='three0' placeholder='请输入标题' class='layui-input'>
                </div>
                <div class='layui-inline'>
                    <select lay-filter='status' id='four0'>
                        <option value='='>精确</option>
                        <option value='like'>模糊</option>
                    </select>
                </div>
            </div>


        </div>
        <button class="layui-btn layui-btn-normal" lay-submit="search" id="search">查询</button>
        <br>
    </div>
</div>
 
 
 
 <!-- 综合查询结束 -->
 
 
<table class="layui-hide" id="test" lay-filter="test"></table>

</body>
<script src="layui/layui.js" charset="utf-8"></script>
<script src="layui/layui.all.js" charset="utf-8"></script>
<script src="js/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript">

//综合查询
var k=1;

layui.use('table', function(){
    var table = layui.table;
    
    //第一个实例
    table.render({
      elem: '#test'//获取存放数据的table容器,即是table的id
      ,height: 515
      ,method:'post'
      ,cache:false //清除缓存
      ,url: 'MessageServlet?method=layuifind' //数据接口,最终传值数据到jsp的方法 
      ,page: true //开启分页
      ,toolbar:false
      ,cols: [[ //表头
        
        {field: 'companyname', title: '用户名', width:300,sort: true}
        ,{field: 'contacts', title: '联系人', width:300,sort: true} 
        ,{field: 'comaddress', title: '地址', width: 177,sort: true}
      ]]
    });
    
    
    

  
  
  $("#search").click(function(){
      //获取文本框的值
      //添加默认的查询条件
      var conditionnum=k-1;
      if ($("#three0").val()=="") {
        alert("第一个文本框输入为空");
        return ;
    }
      //js的字符串拼接
      //var test=$('#three'+hhh+'').val();
      //alert(test)
      var json=[];
    
    //得到加了几个查询的条件
    var i=0;
      for(i;i<=conditionnum;i++){
             var jsonobj={};
             
             if (i==0) {
                jsonobj.one="and";
             }else {
                jsonobj.one=$('#one'+i+'').val();
            }
             jsonobj.two=$('#two'+i+'').val();
             jsonobj.three=$('#three'+i+'').val();
             jsonobj.four=$('#four'+i+'').val();
              json.push(jsonobj);
         }
        //转为json格式
          var sjson=JSON.stringify(json);
        //alert(sjson);
        
     //初始化数据,如果不用layui的显示结果,不用这个table render
        table.render({
            elem: '#test'//获取存放数据的table容器,即是table的id
            ,height: 515
            ,method:'post'
            ,cache:false //清除缓存  
            ,url:"MessageServlet?method=layuisearch"//数据接口,最终返回数据到jsp的方法 
               ,where:{json:sjson}
            ,page: true //开启分页
            ,toolbar:false
            ,cols: [[ //表头
              
              {field: 'companyname', title: '用户名', width:300,sort: true}
              ,{field: 'contacts', title: '联系人', width:300,sort: true} 
              ,{field: 'comaddress', title: '地址', width: 177,sort: true}
            ]]
          });
      
 });
    
  });
  
  

  $(function () {
        //添加条件
        $("#add").click(function (){
            if(k<=5){
                var text="<div id='"+k+"'><div class='layui-inline'>" +
                    "                <select lay-filter='status' id='one"+k+"'>" +
                    "                    <option value='and'>并</option>" +
                    "                    <option value='or'>或</option>" +
                    "                </select>" +
                    "            </div>" +
                    "            <div class='layui-inline'>" +
                    "                <select lay-filter='status' id='two"+k+"'>" +
                    "            <option value='companyname'>机构全称</option>" +
                    "            <option value='belongcom'>归口管理单位</option>" +
                    "            <option value='belongarea'>所在地域</option>" +
                    "            <option value='lawperson'>法人代表</option>" +
                    "            <option value='contacts'>联系人</option>" +
                    "            <option value='techname'>技术需求名称</option>" +
                    "            <option value='keyword'>关键字</option>" +
                    "            <option value='money'>拟投入资金总额</option>" +
                    "            <option value='subject'>学科分类</option>" +
                    "            <option value='domain'>需求技术所属领域</option>" +
                    "            <option value='vocation'>需求技术应用行业</option>" +
                    "            <option value='office'>管理处室</option>"+
                    "                </select>" +
                    "            </div>" +
                    "            <div class='layui-inline'>" +
                    "                <input type='text' id='three"+k+"' placeholder='请输入内容' class='layui-input'>" +
                    "            </div>" +
                    "            <div class='layui-inline'>" +
                    "                <select lay-filter='status' id='four"+k+"'>" +
                    "                    <option value='='>精确</option>" +
                    "                    <option value='like'>模糊</option>" +
                    "                </select>" +
                    "            </div>"
                $("#addCondition").append(text);   
                k+=1;
            }
            
        });
       


    })

  
  
  

</script>
</html>

   servlet的设计(自己书写即可):注意sql语句的拼接

  

private void layuisearch(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException, SQLException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        
        
        //即是点击事件,获取点击跳转的页数,以及每页需要展示的数据 数目,第一次加载默认为page=1&&limit=10
           int page =Integer.parseInt(req.getParameter("page"));
           int limit =Integer.parseInt(req.getParameter("limit"));
           //获取传过来的json
           String json=req.getParameter("json");
           //将json字符串转换为json对象
          JSONArray jsonArray=JSONArray.fromObject(json);
          //转换为实体类的list集合
          List<type> list=(List<type>) jsonArray.toCollection(jsonArray, type.class);
          //获取一共有多少个查询限制条件
          int  limitcount=list.size();
         
          //书写sql语句
          String sql="select * from information where id>0";
          
          for (int i = 0; i < limitcount; i++) {
              
              //查询语句拼接的时候要注意前三个,and/or  数据库列属性     like/=   在sql语句中是字符串  是不用带引号的
              //例如 select * from information   where id>0 and companyname like '凌云'
              if (list.get(i).getFour().equals("like")) {
                  //模糊查询(要注意like要与数据库属性用空格分开啊)
                  sql+="  "+list.get(i).getOne()+"  "+list.get(i).getTwo()+"  "+list.get(i).getFour()+"   '%"+list.get(i).getThree()+"%' ";
            }else {
                //精确查询
                sql+="  "+list.get(i).getOne()+"  "+list.get(i).getTwo()+list.get(i).getFour()+"   '"+list.get(i).getThree()+"' ";
            }
            
        }
          
            
          

           //封装的要传回给前台的数据类
           Users r=new Users();
           //向前端传回状态码 0为正常状态码
           r.setCode(0);
           r.setMsg("获得数据成功");
           //所有的数据数目,并不是单单一页展示的数目
           r.setCount(MessageService.getlayuiinfo(page, limit,sql).size());
           //传递的数据集
           r.setData(MessageService.getlayuiinfo(page, limit,sql));
           //加载处理  可有可无,并不影响
           delay();
           //向前端传递数据并显示
           resp.getWriter().print(JsonUtils.toJson(r));
           
    
    }

 

posted on 2020-11-02 02:34  沫戏回首  阅读(495)  评论(0编辑  收藏  举报

导航