后台代码:
private List《RlEmployee》 rows;
这个就是要在前台显示的rows。但是问题是我的RlEmployee是这样的:
private Integer empId;
private RlDepartment rlDepartment;
private RlPosition rlPosition;
private String empUserName;
……略
这里又有两个对象,就是RlDepartment 和RlPosition ,分别代表“部门”和“职位”,也就是我数据库中表之间的关系,这些pojo是用hibernate自动生成的。在数据库中RlEmployee这张表之存了“部门ID”和“职位ID”。这两个POJO如下:
RlDepartment :
private Integer depId;
private String depName;
private Integer parentId;
private String remark;
RlPosition 略。大致差不多。
现在问题是我在前台想输出“部门名称----depName这个属性”。
原本以为在前台 colModel中这么定义即可:{display : "部门", name : "rlDepartment.depName", width : 100, sortable : true}
但是flexigrid根本就不支持这种写法……所以就想通过process里写方法来达到目的,但是失败了……所以就看了下flexigrid的源码。发现只要在tdVal.push(y)之前再进行遍历一遍即可……
讲flexigrid的源代码改了两处:
1.
// 取列名
var seleceName = cm.name;
//在这里加上下句,然后在colModel中加入subname这个属性,表示需要获取的对象中的属性名。
var subName = cm.subname;
2.
// 过滤key
$.each(data.rows[i], function(x, y) {
if (seleceName == x) {
//这里再进行了2次遍历
/**
* 判断y是不是对象,如果是对象就再次进行遍历,在colModel中加入
* 属性subname,表示需要获取的对象中的属性。
*/
if(typeof(y)=='object'){
if(y != null){
$.each(y, function(x, y) {
if(subName == x){
tdVal.push(y);
}
});
}
}else{
tdVal.push(y);
}
}
})
然后再把colModel改为 {display : "部门", name : "rlDepartment",subname:"depName"}