一个很小的问题,搞了一天,以后不要再犯。
public String queryPage() throws IOException{
//封装分页查询的pageBean
PageBean pageBean = new PageBean();
//封装当前页
pageBean.setCurrentPage(page);
//封装页容量
pageBean.setPageSize(rows);
//封装查询条件
DetachedCriteria dc = DetachedCriteria.forClass(Subarea.class);
//动态封装
//如果关键字不为空
if(StringUtils.isNotBlank(subarea.getAddresskey())){
//为dc封装模糊查询
dc.add(Restrictions.like("addresskey", "%"+subarea.getAddresskey()+"%"));
}
Region region = subarea.getRegion();
if(region != null){
String province = region.getProvince();
String city = region.getCity();
String district = region.getDistrict();
dc.createAlias("region", "r");
if(StringUtils.isNotBlank(province)){
//添加过滤条件,根据省份模糊查询-----多表关联查询,使用别名方式实现
//参数一:分区对象中关联的区域对象属性名称
//参数二:别名,可以任意
dc.add(Restrictions.like("r.province", "%"+province+"%"));
}
if(StringUtils.isNotBlank(city)){
//添加过滤条件,根据市模糊查询-----多表关联查询,使用别名方式实现
//参数一:分区对象中关联的区域对象属性名称
//参数二:别名,可以任意
dc.add(Restrictions.like("r.city", "%"+city+"%"));
}
if(StringUtils.isNotBlank(district)){
//添加过滤条件,根据区模糊查询-----多表关联查询,使用别名方式实现
//参数一:分区对象中关联的区域对象属性名称
//参数二:别名,可以任意
dc.add(Restrictions.like("r.district", "%"+district+"%"));
}
}
pageBean.setDc(dc);
//调用service查询出完整的pageBean
pageBean = subareaService.queryPage(pageBean);
//json转换时排除掉decidezone和region属性
JsonConfig jsonConfig = new JsonConfig();
String[] excludes = {"decidedzone","subareas","currentPage","dc","pageSize"};
jsonConfig.setExcludes(excludes);
String json = JSONArray.fromObject(pageBean,jsonConfig).toString();
//json数据回显
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
ServletActionContext.getResponse().getWriter().print(json);
System.out.println("-------------"+json);
return null;
}
如图,我的后台对数据进行处理,最后得出这个Json串:
[{"rows":[{"addresskey":"11","endnum":"1","id":"402881346491a4fb016491a68d670000","position":"1","region":{"city":"北京市","citycode":"beijing","district":"西城区","id":"QY002","name":"北京市北京市西城区","postcode":"110102","province":"北京市","shortcode":"BJBJXC"},"single":"0","startnum":"111"},{"addresskey":"东城区","endnum":"12","id":"40288134649237af0164925ba0b70000","position":"东城区","region":{"city":"北京市","citycode":"beijing","district":"东城区","id":"QY001","name":"北京市北京市东城区","postcode":"110101","province":"北京市","shortcode":"BJBJDC"},"single":"0","startnum":"11"}],"total":2}]
整理一下就是这个样子:
[
{
"rows":
[
{"addresskey":"11","endnum":"1","id":"402881346491a4fb016491a68d670000","position":"1","region":{"city":"北京市","citycode":"beijing","district":"西城区","id":"QY002","name":"北京市北京市西城区","postcode":"110102","province":"北京市","shortcode":"BJBJXC"},"single":"0","startnum":"111"},
{"addresskey":"东城区","endnum":"12","id":"40288134649237af0164925ba0b70000","position":"东城区","region":{"city":"北京市","citycode":"beijing","district":"东城区","id":"QY001","name":"北京市北京市东城区","postcode":"110101","province":"北京市","shortcode":"BJBJDC"},"single":"0","startnum":"11"}
],
"total":2
}
]
前台datagrid始终无法显示数据,filed是对应的没错,那么问题究竟在哪呢?
翻看了以下以前写的demo,发现是这个格式的json进行回显:
{
"total":100,
"rows":[
{"id":"bg001","region":{"province":"北京","city":"北京","district":"朝阳区"},"addresskey":"朝阳北路","startnum":"1","endnum":"100","single":"0","position":"北京市朝阳区xx路1号-100号"}
]
}
看出来了吗?原来datagrid只能识别一个json对象{},而不是json集合[],所以我把后台的JsonArray改成了JsonObject,就可以把[]去掉了。
String json = JSONObject.fromObject(pageBean,jsonConfig).toString();
完美解决问题!