组合条件查询+分页

查询框效果如下

1.前端代码(有其他的业务代码,请自行略过....):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>管理分区</title>
        <!-- 导入jquery核心类库 -->
        <script type="text/javascript" src="../../js/jquery-1.8.3.js"></script>
        <!-- 导入easyui类库 -->
        <link rel="stylesheet" type="text/css" href="../../js/easyui/themes/default/easyui.css">
        <link rel="stylesheet" type="text/css" href="../../js/easyui/themes/icon.css">
        <link rel="stylesheet" type="text/css" href="../../js/easyui/ext/portal.css">
        <link rel="stylesheet" type="text/css" href="../../css/default.css">
        <script type="text/javascript" src="../../js/easyui/jquery.easyui.min.js"></script>
        <script type="text/javascript" src="../../js/easyui/ext/jquery.portal.js"></script>
        <script type="text/javascript" src="../../js/easyui/ext/jquery.cookie.js"></script>
        <script src="../../js/easyui/locale/easyui-lang-zh_CN.js" type="text/javascript"></script>
        <script type="text/javascript" src="../../js/jquery-custom.js"></script>
        <script type="text/javascript">
function doSearch(){
                $('#searchWindow').window("open");
            }
            //工具栏
            var toolbar = [ {
                id : 'button-search',    
                text : '查询',
                iconCls : 'icon-search',
                handler : doSearch
            }, {
                id : 'button-add',
                text : '增加',
                iconCls : 'icon-add',
                handler : doAdd
            }, {
                id : 'button-edit',    
                text : '修改',
                iconCls : 'icon-edit',
                handler : doEdit
            },{
                id : 'button-delete',
                text : '删除',
                iconCls : 'icon-cancel',
                handler : doDelete
            },{
                id : 'button-import',
                text : '导入',
                iconCls : 'icon-redo',
                handler : doImport
            },{
                id : 'button-export',
                text : '导出',
                iconCls : 'icon-undo',
                handler : doExport
            }];
            // 定义列
            var columns = [ [ {
                field : 'id',
                checkbox : true,
            }, {
                field : 'showid',
                title : '分区编号',
                width : 120,
                align : 'center' ,
                formatter : function(data,row ,index){
                    return row.id;
                }
            },{
                field : 'area.province',
                title : '省',
                width : 120,
                align : 'center',
                formatter : function(data,row ,index){
                    if(row.area != null ){
                        return row.area.province;
                    }
                    return "" ;
                }
            }, {
                field : 'area.city',
                title : '市',
                width : 120,
                align : 'center',
                formatter : function(data,row ,index){
                     if(row.area != null ){
                        return row.area.city;
                    } 
                    return "" ;
                } 
            }, {
                field : 'area.district',
                title : '区',
                width : 120,
                align : 'center' ,
                formatter : function(data,row ,index){
                     if(row.area != null ){
                        return row.area.district;
                    } 
                    return "" ;
                } 
            }, {
                field : 'keyWords',
                title : '关键字',
                width : 120,
                align : 'center'
            }, {
                field : 'startNum',
                title : '起始号',
                width : 100,
                align : 'center'
            }, {
                field : 'endNum',
                title : '终止号',
                width : 100,
                align : 'center'
            } , {
                field : 'single',
                title : '单双号',
                width : 100,
                align : 'center',
                formatter: function(value,row,index){
                    if (row.single == '0'){
                        return "单双号";
                    } else if(row.single == '1'){
                        return "单号";
                    } else {
                        return "双号";
                    }
                }

            } , {
                field : 'assistKeyWords',
                title : '辅助关键字',
                width : 100,
                align : 'center'
            } ] ];
            
            $(function(){
              // 分区管理数据表格
                    $('#grid').datagrid( {
                        iconCls : 'icon-forward',
                        fit : true,
                        border : true,
                        rownumbers : true,
                        striped : true,
                        pageList: [30,50,100],
                        pagination : true,
                        toolbar : toolbar,
                        url:"../../subarea_listPage.action",
                        idField : 'id',
                        columns : columns,
                        onDblClickRow : doDblClickRow
                    });
                
                // 查询分区
                $('#searchWindow').window({
                    title: '查询分区',
                    width: 400,
                    modal: true,
                    shadow: true,
                    closed: true,
                    height: 400,
                    resizable:false
                });
                $("#searchBtn").click(function(){
                    //将表单序列化为json对象
                    var paramJson = $("#searchForm").serializeJson();
                    $("#grid").datagrid("load",paramJson);
                    //关闭查询窗口
                    $("#searchWindow").window("close");
                });
                
                  $('#areaType').combobox({
                    formatter:function(row){
                          row.district = row.province+row.city+row.district;
                        return row.district;
                    }
                }) ;
                
            });
            
            function doDblClickRow(){
                alert("双击表格数据...");
            }
        </script>
    </head>

    <body class="easyui-layout" style="visibility:hidden;">
        <div region="center" border="false">
            <table id="grid"></table>
        </div>
        
        <!-- 查询分区 -->
        <div class="easyui-window" title="查询分区窗口" id="searchWindow" modal="true" collapsible="false" minimizable="false" maximizable="false" style="top:20px;left:200px">
            <div style="overflow:auto;padding:5px;" border="false">
                <form id="searchForm">
                    <table class="table-edit" width="80%" align="center">
                        <tr class="title">
                            <td colspan="2">查询条件</td>
                        </tr>
                        <tr>
                            <td>省</td>
                            <td>
                                <input type="text" name="area.province" />
                            </td>
                        </tr>
                        <tr>
                            <td>市</td>
                            <td>
                                <input type="text" name="area.city"/>
                            </td>
                        </tr>
                        <tr>
                            <td>区(县)</td>
                            <td>
                                <input type="text" name="area.district" />
                            </td>
                        </tr>
                        <tr>
                            <td>定区编码</td>
                            <td>
                                <input type="text" name="fixedArea.id" />
                            </td>
                        </tr>
                        <tr>
                            <td>关键字</td>
                            <td>
                                <input type="text" name="keyWords" />
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2"><a id="searchBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">查询</a> </td>
                        </tr>
                    </table>
                </form>
            </div>
        </div>
    </body>

</html>

主要步骤是:(1)给查询按钮添加点击事件;(2).将表单序列化成json对象,指定组合条件分页查询action的url;

将表单序列化成json对象代码:

//将表单序列化为json对象
            $.fn.serializeJson=function(){  
                var serializeObj={};  
                var array=this.serializeArray();  
                var str=this.serialize();  
                $(array).each(function(){  
                    if(serializeObj[this.name]){  
                        if($.isArray(serializeObj[this.name])){  
                            serializeObj[this.name].push(this.value);  
                        }else{  
                            serializeObj[this.name]=[serializeObj[this.name],this.value];  
                        }  
                    }else{  
                        serializeObj[this.name]=this.value;   
                    }  
                });  
                return serializeObj;  
            }; 

2.后台代码

action

@Controller
@Scope("prototype")
public class SubAreaAction extends BaseAction<SubArea> {

    // 注入service
    @Autowired
    private SubAreaService subAreaService;
        
        /**
     * 组合条件+分页查询的方法
     */
    @Action("subarea_listPage")
    public String listPage() {
        //创建分页对象
        Pageable pageable = new PageRequest(page - 1, rows);
        Specification<SubArea> spec = new Specification<SubArea>() {            
            @Override
            public Predicate toPredicate(Root<SubArea> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                List<Predicate> andPredicate = new ArrayList<Predicate> ();
                List<Predicate> orPredicate = new ArrayList<Predicate> ();
                //先判断区域是否存在
                if(model.getArea() != null ) {    
                    Join<Object, Object> areaJoin = root.join("area");
                        //判断省是否为空
                        if (StringUtils.isNotBlank(model.getArea().getProvince())) {
        
                            Predicate p = cb.like(areaJoin.get("province").as(String.class),"%"+model.getArea().getProvince()+"%" );
                            andPredicate.add(p);
                        }
                        if(StringUtils.isNotBlank(model.getArea().getCity())) {
                            Predicate p = cb.like(areaJoin.get("city").as(String.class), "%"+model.getArea().getCity()+"%");
                            andPredicate.add(p);
                        }
                        if( StringUtils.isNotBlank(model.getArea().getDistrict())) {
                            Predicate p = cb.like(areaJoin.get("district").as(String.class), "%"+model.getArea()+"%");
                            andPredicate.add(p);
                        }

                }
                if(model.getFixedArea() != null ) {
                    Join<Object, Object> fixedAreaJoin = root.join("fixedArea");
                    if(StringUtils.isNotBlank(model.getFixedArea().getId())) {
                        Predicate p = cb.like(fixedAreaJoin.get("id").as(String.class),"%"+model.getFixedArea()+"%" );
                        andPredicate.add(p);
                    }
                }
                
                if(StringUtils.isNotBlank(model.getKeyWords())) {
                    Predicate p = cb.like(root.get("keyWords").as(String.class), "%"+model.getKeyWords()+"%");
                    andPredicate.add(p);
                }
                 Predicate[] array = andPredicate.toArray(new Predicate[0]);
                 Predicate predicate = cb.and(array);
                return predicate;
            }
        };
        //响应
        Page<SubArea> pageResponse = subAreaService.listPage(spec, pageable);
    /*   //创建map用于存放结果集
        Map<String,Object> resultMap = new HashMap<String,Object> ();
        resultMap.put("total", pageResponse.getTotalElements());
        resultMap.put("rows", pageResponse.getContent());
        
        //将结果进行压入栈顶
        ActionContext.getContext().getValueStack().push(resultMap);*/
        pushPageDataToValustackRoot(pageResponse);
        return JSON;
    }

service:

public interface SubAreaService {

    Page<SubArea> listPage(Specification<SubArea> spec, Pageable pageable);
}

serviceImpl:

@Service
@Transactional

public class SubAreaServiceImpl implements SubAreaService {

  //注入dao
    @Autowired
    private SubAreaRepository subAreaRepository;

/**
     * 分页查询的方法
     */
    @Override
    public Page<SubArea> listPage(Specification<SubArea> spec,Pageable pageable) {
        
        
        return subAreaRepository.findAll(spec, pageable);
    }
      
}

dao层:

public interface SubAreaRepository extends JpaRepository<SubArea,String>,JpaSpecificationExecutor<SubArea> {
    
}

猜你喜欢

转载自www.cnblogs.com/peng611/p/8977827.html
今日推荐