如图所示:
在对渠道分析的时候,想查看渠道的详细信息,每个渠道的下载方式不同,信息编号也不同,这就需要构建动态数据列表,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;
}