您的位置:首页 > 其它

021 分区组合条件分页查询 - bos

2017-08-17 15:42 274 查看
一、没有过滤条件的分区分页查询

1.先修改分页查询的请求地址url(#grid)

// 收派标准数据表格
$('#grid').datagrid( {
iconCls : 'icon-forward',
fit : true,
border : true,
rownumbers : true,
striped : true,
pageList: [30,50,100],
pagination : true,
toolbar : toolbar,
url : "subareaAction_pageQuery.action",
idField : 'id',
columns : columns,
onDblClickRow : doDblClickRow
});

2.编写SubareaAction.pageQuery

/**
* 分页查询分区
* @return
*/
public String pageQuery(){
subareaService.pageQuery(pageBean);
object2JsonAndWriteToResponse(pageBean, new String[]{"currentPage", "detachedCriteria", "pageSize", "decidedzone", "subareas"});
return NONE;
}

3.编写SubareaService.pageQuery

@Override
public void pageQuery(PageBean<Subarea> pageBean) {
subareaDao.pageQuery(pageBean);
}

4.在Subarea.hbm.xml中修改Region的延迟加载策略,禁止延迟加载

<many-to-one name="region" class="com.hao.bos.entity.Region" fetch="select" lazy="false">
<column name="region_id" length="32" />
</many-to-one>

二、带有过滤条件的分区分页查询

1.提供的表单序列化函数,用于将表单中的输入项转化为json对象

//表单序列化函数
$(function(){
$.fn.serializeJson = function() {
var serializeObj = {};
var array = this.serializeArray();
$(array).each(function(){
if (serializeObj[this.name]) {
if ($.isArray(serializeObj[this.name])) {
serializeObj[this.name].push(this.value);
} else {
serializeObj[this.name] = [ serializeObj[this.name], this.value ];
}
} else {
serializeObj[this.name] = this.value;
}
});
return serializeObj;
};
});

2.为查询窗口中的查询按钮绑定事件,处理函数内调用datagrid的load方法重新发送ajax请求,并且提交参数,参数为在查询框中输入的过滤条件(表单序列化)

$("#btn").click(function(){
//将制定的表单转化为json数据
var p = $("#searchForm").serializeJson();
//调用数据表格的load方法
$("#grid").datagrid("load",p);
//关闭查询窗口
$("searchWindow").window("close");
});

3.修改SubareaAction.pageQuery方法,增加过滤功能

/**
* 分页查询分区
* @return
*/
public String pageQuery(){
//获取离线查询对象
DetachedCriteria dc = pageBean.getDetachedCriteria();

//动态添加过滤条件
String addressKey = model.getAddresskey();
if(StringUtils.isNotBlank(addressKey)){
//添加过滤条件,根据地址关键字模糊查询
dc.add(Restrictions.like("addressKey", "%"+addressKey+"%"));
}

Region region = model.getRegion();
if(region != null){
String province = region.getProvince();
String city = region.getCity();
String district = region.getDistrict();

//注意省、市、区不是分区表里的,因此要做关联查询

//类似SQL的连接操作,r为对应关联类的别名,第一个参数要求为分区对象关联的对象的属性名称(Subarea.region)
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+"%"));
}
}
subareaService.pageQuery(pageBean);
object2JsonAndWriteToResponse(pageBean, new String[]{"currentPage", "detachedCriteria", "pageSize", "decidedzone", "subareas"});
return NONE;
}

3.修改BaseDaoImpl.pageQuery代码,设置涉及关联查询时,封装数据的方式

//指定Hibernate封装对象的方式:涉及多表查询时,以查询的目标实体类型返回
detachedCriteria.setResultTransformer(DetachedCriteria.ROOT_ENTITY);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: