用<t:datagrid做统计
想做一个分页table.看datagrid 已经写的比较好了,所以想复用下,而且datagrid的分页比较好用啊,但是现在demo都是给的单个类的增删查改,这个我们首先要看看这个datagrid生产的源码TagUtil.datagrid(response, dataGrid);//这个大家应该都不陌生,这个就是向前台输出的,然后进入listtojson方法,有这个一段values = fieldNametoValues(fieldName, list.get(j));//利用反射获取值.大家可以仔细看看if(list.get(j) instanceof Map){
values = ((Map)list.get(j)).get(fieldName);
}else{
values = fieldNametoValues(fieldName, list.get(j));
}加上对map的支持,这样我们只要返回map就可以处理了,这样我们只要模仿datagrid来写就可以了如:<span style="line-height: 1.5;">前台页面</span> <t:datagrid name="statisticalProduct" title="购物车" actionUrl="statisticalController.do?productCount" idField="id" fit="true">
<t:dgCol title="编号" field="id" hidden="false"></t:dgCol>
<t:dgCol title="产品名称" field="name" width="200"></t:dgCol>
<t:dgCol title="销售量" field="count" width="200"></t:dgCol>
<t:dgCol title="销售额" field="sumPrice" ></t:dgCol>
<t:dgToolBar title="详情" icon="icon-edit" url="shoppingCartController.do?addorupdate" funname="update"></t:dgToolBar>
</t:datagrid>dataGrid.setTotal(allCounts);
criteria.createAlias("product", "product");
criteria.setProjection(Projections.projectionList()
.add(Projections.property("product.id"), "id")
.add(Projections.groupProperty("product.id"))
.add(Projections.property("product.productName"), "name")//这里来设置别名--和前台对应
.add(Projections.count("product.id"),"count")
.add(Projections.sum("price"), "sumPrice"))
.addOrder(dataGrid.getOrder().name() == "asc"?Order.asc(dataGrid.getSort()):Order.desc(dataGrid.getSort()))
.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)//这里确定返回的是map
.setMaxResults(dataGrid.getRows())
.setFirstResult(dataGrid.getPage()*dataGrid.getRows());
dataGrid.setReaults(criteria.list());
return dataGrid; 牛人啊!膜拜
页:
[1]