JAVAEE——BOS物流項目06:分頁查詢、分區導出Excel文件、定區添加、分頁問題總結


學習計划

1、分區組合條件分頁查詢

n 分區分頁查詢(沒有過濾條件)

n 分區分頁查詢(帶有過濾條件)

2、分區導出

n 頁面調整

使用POI將數據寫到Excel文件

n 通過輸出流進行文件下載

3、定區添加

n 定區概念

n 定區添加頁面調整

n 服務端實現

4、定區分頁查詢

n 頁面調整

n 服務端實現

n 分頁問題總結

 

分區組合條件分頁查詢

2.1 分區分頁查詢(沒有過濾條件)

頁面:WEB-INF/pages/base/subarea.jsp

第一步:修改jsp頁面中datagridURL地址

 

 

第二步:在SuareaAction中提供分頁查詢方法pageQuery

 

 

第三步:修改subarea.hbm.xml

 

 

2.2 分區分頁查詢(帶有過濾條件)

2.2.1 頁面調整

 

 

datagrid提供的方法:用於重新發送ajax請求,並且可以提交參數

 

 

 

第一步:提供一個工具方法,可以將指定的form表單中所有的輸入項轉為json數據,用於參數提交

        //定義一個工具方法,用於將指定的form表單中所有的輸入項轉為json數據{key:value,key:value}
        $.fn.serializeJson=function(){  
            var serializeObj={};  
            var array=this.serializeArray();
            $(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;  
        };

 

第二步:為查詢窗口中查詢按鈕綁定事件

 

$("#btn").click(function(){
            //將指定的form表單中所有的輸入項轉為json數據{key:value,key:value}
            var p = $("#searchForm").serializeJson();
            console.info(p);
            //調用數據表格的load方法,重新發送一次ajax請求,並且提交參數
            $("#grid").datagrid("load",p);
            //關閉查詢窗口
            $("#searchWindow").window("close");
        });

 

2.2.2 修改Action中分頁查詢方法

 

    /**
     * 分頁查詢
     */
    public String pageQuery(){
        DetachedCriteria dc = pageBean.getDetachedCriteria();
        //動態添加過濾條件
        String addresskey = model.getAddresskey();
        if(StringUtils.isNotBlank(addresskey)){
            //添加過濾條件,根據地址關鍵字模糊查詢
            dc.add(Restrictions.like("addresskey", "%"+addresskey+"%"));
        }
        
        Region region = model.getRegion();
        if(region != null){
            String province = region.getProvince();
            String city = region.getCity();
            String district = region.getDistrict();
            dc.createAlias("region", "r");
            if(StringUtils.isNotBlank(province)){
                //添加過濾條件,根據省份模糊查詢-----多表關聯查詢,使用別名方式實現
                //參數一:分區對象中關聯的區域對象屬性名稱
                //參數二:別名,可以任意
                dc.add(Restrictions.like("r.province", "%"+province+"%"));
            }
            if(StringUtils.isNotBlank(city)){
                //添加過濾條件,根據市模糊查詢-----多表關聯查詢,使用別名方式實現
                //參數一:分區對象中關聯的區域對象屬性名稱
                //參數二:別名,可以任意
                dc.add(Restrictions.like("r.city", "%"+city+"%"));
            }
            if(StringUtils.isNotBlank(district)){
                //添加過濾條件,根據區模糊查詢-----多表關聯查詢,使用別名方式實現
                //參數一:分區對象中關聯的區域對象屬性名稱
                //參數二:別名,可以任意
                dc.add(Restrictions.like("r.district", "%"+district+"%"));
            }
        }
        subareaService.pageQuery(pageBean);
        this.java2Json(pageBean, new String[]{"currentPage","detachedCriteria","pageSize",
                        "decidedzone","subareas"});
        return NONE;
    }

 

修改BaseDao中的分頁查詢方法

 

 

 

分區數據導出功能

3.1 頁面調整

為頁面中導出按鈕綁定事件

 

 

3.2 服務端實現

第一步:查詢所有的分區數據

第二步:使用POI將數據寫到Excel文件中

第三步:使用輸出流進行文件下載

/**
     * 分區數據導出功能
     * @throws IOException 
     */
    public String exportXls() throws IOException{
        //第一步:查詢所有的分區數據
        List<Subarea> list = subareaService.findAll();
        
        //第二步:使用POI將數據寫到Excel文件中
        //在內存中創建一個Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        //創建一個標簽頁
        HSSFSheet sheet = workbook.createSheet("分區數據");
        //創建標題行
        HSSFRow headRow = sheet.createRow(0);
        headRow.createCell(0).setCellValue("分區編號");
        headRow.createCell(1).setCellValue("開始編號");
        headRow.createCell(2).setCellValue("結束編號");
        headRow.createCell(3).setCellValue("位置信息");
        headRow.createCell(4).setCellValue("省市區");
        
        for (Subarea subarea : list) {
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
            dataRow.createCell(0).setCellValue(subarea.getId());
            dataRow.createCell(1).setCellValue(subarea.getStartnum());
            dataRow.createCell(2).setCellValue(subarea.getEndnum());
            dataRow.createCell(3).setCellValue(subarea.getPosition());
            dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
        }
        
        //第三步:使用輸出流進行文件下載(一個流、兩個頭)
        
        String filename = "分區數據.xls";
        String contentType = ServletActionContext.getServletContext().getMimeType(filename);
        ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();
        ServletActionContext.getResponse().setContentType(contentType);
        
        //獲取客戶端瀏覽器類型
        String agent = ServletActionContext.getRequest().getHeader("User-Agent");
        filename = FileUtils.encodeDownloadFilename(filename, agent);
        ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename="+filename);
        workbook.write(out);
        return NONE;
    }

 

 

定區添加

定區是進行物流分配的基本單位,可以將取派員、分區、客戶信息進行關聯,為自動分單提供數據。

頁面:WEB-INF/pages/base/decidedzone.jsp

 

 

 

4.1 頁面調整

4.1.1 使用combobox展示取派員數據

第一步:修改定區頁面中combobox下拉框URL地址

 

 

 

第二步:在StaffAction中提供listajax方法,查詢所有未刪除的取派員,返回json

/**
     * 查詢所有未刪除的取派員,返回json
     */
    public String listajax(){
        List<Staff> list = staffService.findListNotDelete();
        this.java2Json(list, new String[]{"decidedzones"});
        return NONE;
    }

 

第三步:在BaseDao中擴展一個通用查詢方法

 

 

第四步:在StaffService中擴展方法,查詢未刪除的取派員

 

 

 

4.1.2 使用datagrid展示分區數據

第一步:修改頁面中datagridURL地址

 

第二步:在SubareaAction中提供listajax方法,查詢所有未關聯到定區的分區,返回json

 

 

第三步:在SubareaService中擴展方法,查詢未關聯到定區的分區

 

 

 

 

4.1.3 為保存按鈕綁定事件提交表單

 

 

問題一:提交的表單中存在多個id參數

 

 

解決方案:將datagridfiledid改為subareaid

 

 

問題二:提交的表單中subareaid參數的值為null

 

 

解決方案:在分區類中提供getSubareaid方法

 

 

4.2 服務端實現

創建定區的ActionServiceDao

 

 

Service代碼:

 

 

 

配置struts.xml

 

 

 

定區分頁查詢

第一步:修改定區jsp頁面中datagridURL地址

 

 

第二步:在定區Action中提供pageQuery方法

 

 

第三步:在Decidedzone.hbm.xml中修改,查詢定區對象時需要立即加載關聯的取派員對象

 

 

分頁查詢死循環問題

1、頁面不需要展示關聯數據時

解決:將關聯對象屬性排除掉

 

2、頁面需要展示關聯數據時

解決:將關聯對象改為立即加載,並且將關聯對象中的屬性排除

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM