最近开发时遇到一个前台动态加载列的问题,于是就总结了下和大家分享;
思路:和正常的jqgrid开发差不多,就是对于列的话要通过后台去动态组装然后再返回前台,而不是传统的在前台js写死。下面我们来看看我是如何实现的吧
js代码
var hrJqGridCommonSettings ={
mtype : 'POST',} ;
//声明全局变量(显示的列和列名)
var nameString=[];
var modelString=[];
//该方法和ajax请求一样,只是本什么有做封装可以直接请求service ,返回一个map
JDS.call({
async:false,
service : "hrAttDailyReportDataService.jsonModelAndNames",
success : function(result) {
bean = result.data;
nameString=eval("("+bean.colNames+")");//此处记得用eval()行数将string转为array
modelString=eval("("+bean.colModel+")");
}
});
$("#list").jqGrid($.extend(hrJqGridCommonSettings, {
url : ctx + '/hr/attAnnual_grid/grid?serviceName=hrAttDailyReportDataService&serviceMethod=queryByDailyReportData',
colNames : nameString,
colModel :modelString,
sortable : true, // 是否可排序
//autowidth: true,
shrinkToFit:false,
jsonReader : {
root : "data",
total : "totalPages",
page : "currentPage",
records : "totalCount",
repeatitems : false
}
}));
java 代码
//该方法动态查询想要展示的列
public Map
List
//将数据字典维护的列作为页面将要显示的列
public List
//该方法为页面查询的结果
@Override
public List
List
pagingInfo);
if (list != null && list.size() > 0) {
List
//将数据字典查出来的列作为参数查出对应的数据
public int vacationHours(String code, String empUuid) {
String sql = "select sum(r.leave_hours) from hr_att_daily_report_vacations r, hr_att_daily_report_data d where r.daily_report_uuid = d.uuid and r.category_key = '"
+ code + "' and r.employee_uuid='" + empUuid + "' ";
Query query = this.dao.getSession().createSQLQuery(sql);
int hours = query.uniqueResult() != null && query.uniqueResult() != "" ? Integer.valueOf(query.uniqueResult()
.toString()) : 0;
return hours;
}