遇到这个问题,以为ztree本来以为用ajax 回调2次,ztree会自动加载数据,结果不行,自己想天真了,后来看了一下别人的文档,受到启发,可以用map做做一个list<map<string,object>>
因此后台再写了一个方法
@Override
public List<Map<String,Object>> getModulePListByRole(String id) {
RolePVO rolePVO = rolePVODao.getRoleVOById(id);
System.out.println(rolePVO.getModuleId());
String moduleIds=rolePVO.getModuleId();
ModulePQuery query = new ModulePQuery();
List<ModuleP> list = modulePDao.selectByExample(query);
List<Map<String,Object>> arrayList = new ArrayList();
if(moduleIds!=null&&!"".equals(moduleIds)){
String[] split = moduleIds.split(",");
for (ModuleP moduleP : list) {
Map<String, Object> map = new HashMap<String,Object>();
map.put("id" ,moduleP.getModuleId());
map.put("isisParent",moduleP.getIsLeaf()==0?"true":"false");
map.put("name",moduleP.getName());
map.put("pId",moduleP.getParentId());
if(split !=null&&split.length>0){
for (String string : split) {
if(string.equals(moduleP.getModuleId())){
map.put("checked",true);
}
}
}else{
if(moduleIds.equals(moduleP.getModuleId())){
map.put("checked",true);
}
}
arrayList.add(map);
}
}
return arrayList;
}
这里我用了我在原来的vo里面填了2个字段,一个是string ModuleId,还有个是string 【】ModuleIds
为什么这么做
因为我VOdaoxml ,配置了一个
<select id="getRoleVOById" parameterType="string" resultType="com.lin.jk.pojo.VO.RolePVO">
SELECT
r.ROLE_ID,
NAME,
REMARK,
GROUP_CONCAT(
(
SELECT
MODULE_ID
FROM
module_p m
WHERE
m.MODULE_ID = mp.MODULE_ID
)
) AS MODULE_ID
FROM
role_p r
LEFT JOIN role_module_p mp ON r.ROLE_ID = mp.ROLE_ID WHERE r.ROLE_ID=#{roleId}
GROUP BY
r.ROLE_ID
</select>
这里配置了.MODULE_ID ,vo能接收数据库传过来的MODULE_ID,这样就能对上面的数据进行处理,
而string 【】ModuleIds为了是接收前端传过来的数据,这里是数组,就直接接收前端传过来的数组,这样就可以减少if语句判断,split生成数组等
只用把vo类在set到pojo里就可以了