如图所示:
在对渠道分析的时候,想查看渠道的详细信息,每个渠道的下载方式不同,信息编号也不同,这就需要构建动态数据列表,EASYUI动态解析列表。
1、前台页面:
给分析按钮注册事件。
function detailWid() { var rows = $('#admin_adinstallbywid_datagrid').datagrid('getChecked'); wid = rows[0].wid; time= rows[0].time; $.ajax({ type:"POST", dataType:"json", async:true, url:'${pageContext.request.contextPath}/adInstallResultAction!getAdInstallResultByDetail.action?wid='+wid+'&time='+time, success:function(response){ $("#analyseDetail").datagrid( {columns:new Array(response.columns), //动态解析后台columns title:wid+"渠道分析" } ).datagrid("loadData",response); } }); $('#admin_adresultbydetail_datagrid').dialog('open'); }
2、后台Service层构建前台返回数据,由于不是实体类,就用普通数组存储。
public DataGrid datagridByDetail(PageUse pageUse) { DataGrid dg = new DataGrid(); //分组查询所有adid String hql="select count(adid),adid from AdInstallResult where wid='"+pageUse.getWid()+"' and substring(time,1,10)='"+pageUse.getTime()+"' group by adid"; List list=adInstallResultDao.find(hql); Map<String,String> map=new HashMap<String,String>(); for(int i=0;i<list.size();i++) { Object[] object=(Object[])list.get(i); map.put(String.valueOf(object[1]), String.valueOf(object[0])); } String hql2="select count(adflag),adflag from AdInstallResult where wid='"+pageUse.getWid()+"' and substring(time,1,10)='"+pageUse.getTime()+"' group by adflag"; List list2=adInstallResultDao.find(hql2); for(int j=0;j<list2.size();j++) { Object[] object=(Object[])list2.get(j); map.put(String.valueOf(object[1]), String.valueOf(object[0])); } //遍历map List<Object> rowsList=new ArrayList<Object>(); List<Object> columnList=new ArrayList<Object>(); rowsList.add(map); Map<String,Object> columnMap; for(Iterator iter=map.entrySet().iterator();iter.hasNext();) { //动态构建columns列 Map.Entry<String, String> entry=(Map.Entry<String, String>)iter.next(); columnMap=new HashMap<String,Object>(); columnMap.put("field", entry.getKey()); columnMap.put("title", entry.getKey());; columnMap.put("width", "100"); columnList.add(columnMap); } dg.setTotal(1); dg.setRows(rowsList); dg.setColumns(columnList); return dg; }