设为首页 加入收藏

TOP

springmvc+easyui实现透视表-动态生成列(二)
2015-07-20 17:30:06 来源: 作者: 【 】 浏览:11
Tags:springmvc easyui 实现 透视 动态 生成
向前台传送整个json数据的实体bean PageHelper page = new PageHelper(); //用于后台分页的 List columnList = new ArrayList (); Map column = new HashMap (); column.put("applyDate", "日期"); column.put("proBriefName", "项目简称"); column.put("activityCode", "财务计划编号"); column.put("applicant", "申请人"); column.put("amount", "金额"); column.put("fundPurpose", "经费用途"); column.put("loanNo", "借款单号"); // 获取实体类的所有属性,返回Field数组 LoanBean t = new LoanBean(); Field[] field = t.getClass().getDeclaredFields(); // 遍历所有属性 for (int j = 0; j < field.length; j++) { DatagridColumn dc = new DatagridColumn(); // 获取属性的名字 String name = field[j].getName(); dc.setField(name); dc.setTitle(column.get(name)); dc.setWidth(80); columnList.add(dc); } String columnJson = JSON.toJSONString(columnList, SerializerFeature.UseSingleQuotes); System.out.println("json格式的column为:"+columnJson); columnJson = "["+columnJson+"]"; /* //columns需要后台生成 String columns = "[["; columns = columns + "{field:'applyDate',title:'日期',width:80},"; columns = columns + "{field:'proBriefName',title:'项目简称',width:80},"; columns = columns + "{field:'activityCode',title:'财务计划编号',width:80},"; columns = columns + "{field:'applicant',title:'申请人',width:80},"; columns = columns + "{field:'amount',title:'金额',width:80},"; columns = columns + "{field:'fundPurpose',title:'经费用途',width:80},"; columns = columns + "{field:'loanNo',title:'借款单号',width:80}"; columns = columns + "]]"; */ try { columnJson = URLEncoder.encode(columnJson,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(columnJson); //根据条件查询总数 Long total = financeService.loanCount(page); dg.setTotal(total); //根据条件查询List List loanList = financeService.loanList(page);//这里是重点 dg.setRows(loanList); dg.setColumns(columnJson); return dg; }
之前都是用实体bean加载记录数据,再放到datagrid的rows里面,然后springmvc的jackson自动将其序列化为json数组传到前台,
但是现在如果实体类的属性不固定(大多数情况下都是这个),该怎么办?我这里给个思路:
我用了一个ResultBean来加载返回的结果记录集,这个ResultBean里有两个属性,第一个是记录的第一列的标题rowTag,第二个属性就是自第二列之后每一列下的值,因为列数不固定,所以就用了Map data来获取,后台查出几个记录,就put对应的kew,value进去,最后再写个方法,根据结果集、表头Title和Field映射Map、行标签,生成Map类型的rows,这个转换方法核心就是遍历map再加载,如下:

   /**
     * 根据结果集、表头Title和Field映射Map、行标签,生成Map类型的rows
     * @param rlist
     * @param colMap
     * @param rowTag
     * @return
     */
    public List
   
    > getDatagridMap(List
    
      rlist, Map
     
       colMap, String rowTag) { List
      
       > datagridMap = new ArrayList
       
        >(); for(int i=0;i
        
          rMap= new HashMap
         
          (); ResultBean rb = rlist.get(i); rMap.put(rowTag, rb.getRowTag()); //遍历Map Set
          
            set1 = rb.getData().keySet(); Iterator
           
             it = set1.iterator(); while(it.hasNext()){ String colTitle = it.next(); if(colMap.containsKey(colTitle)){ rMap.put(colMap.get(colTitle), rb.getData().get(colTitle)); } } datagridMap.add(rMap); } return datagridMap; }
           
          
         
        
       
      
     
    
   

总之,一句话,原理最重要, 后台返回对应的json格式(注意,json格式是最核心的),前台就能生成相应的界面。至于json数据怎么生成,不同的人有不同的实现方式。哦了!

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++STL源码学习(之slist篇) 下一篇Codeforces 327A-Flipping Game(..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)