zoukankan      html  css  js  c++  java
  • BOS06——带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题,文件导出,BaseDao扩展一个离线Criteria查询,前端字段名重复问题(不知道对应那个字段了),多张表保存问题

    1、带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题

    由于使用的都是ajax请求,页面没刷新,数据(条件的参数)一直存在页面中

     1 //定义一个工具方法,用于将指定的form表单中所有的输入项转为json数据{key:value,key:value}
     2 $.fn.serializeJson=function(){
     3     var serializeObj={};
     4     var array=this.serializeArray();
     5     $(array).each(function(){
     6         if(serializeObj[this.name]){
     7             if($.isArray(serializeObj[this.name])){
     8                 serializeObj[this.name].push(this.value);
     9             }else{
    10                 serializeObj[this.name]=[serializeObj[this.name],this.value];
    11             }
    12         }else{
    13             serializeObj[this.name]=this.value;
    14         }
    15     });
    16     return serializeObj;
    17 };
    18 
    19 $("#btn").click(function () {
    20     //将指定的form表单中所有的输入项转为json数据{key:value,key:value}
    21     var p = $("#searchForm").serializeJson();
    22     console.info(p);
    23     //调用数据表格的load方法,重新发送一次ajax请求,并且提交参数
    24     $("#grid").datagrid("load",p);
    25     //关闭查询窗口
    26     $("#searchWindow").window("close");
    27 });
    前端
     1 public String pageQuery() throws Exception {
     2     // 取出离线Criteria对象
     3     DetachedCriteria dc = super.pageBean.getDetachedCriteria();
     4     // 获取region对象
     5     Region region = super.model.getRegion();
     6 
     7     if (super.model!=null){
     8         String province = region.getProvince();
     9         String city = region.getCity();
    10         String district = region.getDistrict();
    11         // 多表查询***
    12         // 为另一张表起别名 ==> select * from subarea s inner join region r on s.region_id = r.id
    13         dc.createAlias("region", "r");
    14 
    15         if(StringUtils.isNotBlank(province)){
    16             //添加过滤条件,根据省份模糊查询-----多表关联查询,使用别名方式实现
    17             //参数一:分区对象中关联的区域对象属性名称
    18             //参数二:别名,可以任意
    19             dc.add(Restrictions.like("r.province", "%"+province+"%"));
    20         }
    21 
    22         if(StringUtils.isNotBlank(city)){
    23             //添加过滤条件,根据市模糊查询-----多表关联查询,使用别名方式实现
    24             //参数一:分区对象中关联的区域对象属性名称
    25             //参数二:别名,可以任意
    26             dc.add(Restrictions.like("r.city", "%"+city+"%"));
    27         }
    28 
    29         if(StringUtils.isNotBlank(district)){
    30             //添加过滤条件,根据区模糊查询-----多表关联查询,使用别名方式实现
    31             //参数一:分区对象中关联的区域对象属性名称
    32             //参数二:别名,可以任意
    33             dc.add(Restrictions.like("r.district", "%"+district+"%"));
    34         }
    35     }
    36 
    37 
    38     subareaService.pageQuery(super.pageBean);
    39 
    40     super.writeJson(super.pageBean,new String[]{"currentPage", "detachedCriteria", "pageSize","decidedzone","subareas"});
    41 
    42     return "none";
    43 }
    pageQuery方法,记得把super.model==> region
    1 // 3.指定封装对象的方式
    2 detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);
    BaseDao

    2、文件导出

     1 /**
     2  * 分区数据导出功能
     3  * @throws IOException
     4  */
     5 public String exportXls() throws IOException {
     6     //第一步:查询所有的分区数据
     7     List<Subarea> list = subareaService.findAll();
     8 
     9     //第二步:使用POI将数据写到Excel文件中
    10     //在内存中创建一个Excel文件
    11     HSSFWorkbook workbook = new HSSFWorkbook();
    12     //创建一个标签页
    13     HSSFSheet sheet = workbook.createSheet("分区数据");
    14     //创建标题行
    15     HSSFRow headRow = sheet.createRow(0);
    16     headRow.createCell(0).setCellValue("分区编号");
    17     headRow.createCell(1).setCellValue("开始编号");
    18     headRow.createCell(2).setCellValue("结束编号");
    19     headRow.createCell(3).setCellValue("位置信息");
    20     headRow.createCell(4).setCellValue("省市区");
    21 
    22     for (Subarea subarea : list) {
    23         HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1);
    24         dataRow.createCell(0).setCellValue(subarea.getId());
    25         dataRow.createCell(1).setCellValue(subarea.getStartnum());
    26         dataRow.createCell(2).setCellValue(subarea.getEndnum());
    27         dataRow.createCell(3).setCellValue(subarea.getPosition());
    28         dataRow.createCell(4).setCellValue(subarea.getRegion().getName());
    29     }
    30 
    31     //第三步:使用输出流进行文件下载(一个流、两个头)
    32 
    33     String filename = "分区数据.xls";
    34     String contentType = ServletActionContext.getServletContext().getMimeType(filename);
    35     ServletOutputStream out = ServletActionContext.getResponse().getOutputStream();
    36     ServletActionContext.getResponse().setContentType(contentType);
    37 
    38     //获取客户端浏览器类型
    39     String agent = ServletActionContext.getRequest().getHeader("User-Agent");
    40     filename = FileUtils.encodeDownloadFilename(filename, agent);
    41     ServletActionContext.getResponse().setHeader("content-disposition", "attachment;filename="+filename);
    42     workbook.write(out);
    43     return NONE;
    44 }
    文件导出
     1 public class FileUtils {
     2     /**
     3      * 下载文件时,针对不同浏览器,进行附件名的编码
     4      *
     5      * @param filename 下载文件名
     6      * @param agent    客户端浏览器
     7      * @return 编码后的下载附件名
     8      * @throws IOException
     9      */
    10     public static String encodeDownloadFilename(String filename, String agent)
    11             throws IOException {
    12         if (agent.contains("Firefox")) { // 火狐浏览器
    13             filename = "=?UTF-8?B?"
    14                     + new BASE64Encoder().encode(filename.getBytes("utf-8"))
    15                     + "?=";
    16             filename = filename.replaceAll("
    ", "");
    17         } else { // IE及其他浏览器
    18             filename = URLEncoder.encode(filename, "utf-8");
    19             filename = filename.replace("+", " ");
    20         }
    21         return filename;
    22     }
    23 }
    FileUtils

    3、BaseDao扩展一个离线Criteria查询

    4、前端字段名重复问题(不知道对应那个字段了),多张表保存问题

     1 private String[] subareaid;     // 接受前端传来的subareaid
     2 
     3 public void setSubareaid(String[] subareaid) {
     4     this.subareaid = subareaid;
     5 }
     6 
     7 public String save() throws Exception {
     8 
     9     decidedzoneService.save(super.model, subareaid);
    10 
    11     return "list";
    12 }
    DecidedzoneAction
     1 public void save(Decidedzone model, String[] subareaid) {
     2     // 此时保存的是decidedzone表中的数据,另一个表的还没保存
     3     decidedzoneDao.save(model);
     4     // 保存subarea表中的decidedzone_id字段
     5     for (String s : subareaid) {
     6         Subarea subarea = subareaDao.findById(s);
     7         subarea.setDecidedzone(model);  // 关联分区,由于是持久化状态,不用保存
     8     }
     9 
    10 }
    DecidedzoneService
  • 相关阅读:
    DRF(四)
    DRF----------(三)
    DRF--------(二)
    DRF(一)
    VUE(四)
    VUE(三)
    VUE(二)
    DRF 序列化组件 模型层中参数补充
    django中基于python3.6使用容联发送短信
    django-jwt token校验源码简析
  • 原文地址:https://www.cnblogs.com/x54256/p/8585004.html
Copyright © 2011-2022 走看看