1.//返回json字符串,为zTree提供数据 {id:"",pId:"",name:"",checked:"true|false"}
/**
* 为了使用 zTree树,就要组织好zTree树所使用的json数据
* json数据结构如下:
* [{"id":"模块的id","pId":"父模块id","name":"模块名","checked":"true|false"},{"id":"模块的id","pId":"父模块id","name":"模块名","checked":"true|false"}]
*
* 常用的json插件有哪些?
* json-lib fastjson struts-json-plugin-xxx.jar,手动拼接
*
* 如何输出?
* 借助于response对象输出数据
*/
public String roleModuleJsonStr() throws Exception{
//通过角色id加载出当前的角色
Role role=roleService.get(Role.class, model.getId());
//通过对象导航的方式加载当前用户下的模块
Set<Module> modules = role.getModules();
//加载所有的模块列表
List<Module>moduleList=moduleService.find("from Module where state=1", Module.class, null);
StringBuilder sb=new StringBuilder();
int size=moduleList.size();
sb.append("[");
for (Module module : moduleList) {
size--;
sb.append("{\"id\":\"").append(module.getId());
sb.append("\",\"pId\":\"").append(module.getParentId());
sb.append("\",\"name\":\"").append(module.getName());
sb.append("\",\"checked\":\"");
if(modules.contains(module)){
sb.append("true");
}else{
sb.append("false");
}
sb.append("\"}");
if(size>0){
sb.append(",");
}
}
sb.append("]");
//得到json对象
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
//使用json对象返回json串
response.getWriter().write(sb.toString());
System.out.println("拼接后的json字符串:"+sb.toString());
return NONE;
}
2.导入zTree相关的js及css
<link rel="stylesheet" href="${ctx }/components/zTree/css/zTreeStyle/zTreeStyle.css" type="text/css" />
<script type="text/javascript" src="${ctx }/components/zTree/js/jquery1.4.4.min.js"></script>
<script type="text/javascript" src="${ctx }/components/zTree/js/jquery.ztree.core-3.5.min.js"></script>
<script type="text/javascript" src="${ctx }/components/zTree/js/jquery.ztree.excheck-3.5.min.js"></script>
3、编写代码
<script type="text/javascript">
var zTreeObj;
var setting = {
check : {
enable : true
},
data : {
simpleData : {
enable : true
}
}
};
$(document).ready(function() {
$.ajax( {
url : "${ctx}/sysadmin/roleAction_roleModuleJsonStr.action?id=${id}",
type : "get",
dataType : "text",
success : initZtree
});
});
//初始化ZTree树
function initZtree(data) {
var zNodes = eval("(" + data + ")"); //动态js语句
zTreeObj = $.fn.zTree.init($('#jkTree'), setting, zNodes); //jkTree 树的id,支持多个树
zTreeObj.expandAll(true); //展开所有树节点
}
//获取所有选择的节点
function submitCheckedNodes(treeNode) {
var nodes = new Array();
nodes = zTreeObj.getCheckedNodes(true); //取得选中的结点
var str = "";
for (i = 0; i < nodes.length; i++) {
if (str != "") {
str += ",";
}
str += nodes[i].id;
}
$('#moduleIds').val(str);
}
</script>
4、RoleAction中保存选中的模块
/**
* 保存所有的节点
*/
public String module() throws Exception{
//根据id查询选中的角色
Role role=roleService.get(Role.class, model.getId());
Set<Module>moduleSet=new HashSet<Module>();
//分割接收模块的id
if(moduleIds!=null){
String[] ids=moduleIds.split(",");
for (String id : ids) {
moduleSet.add(moduleService.get(Module.class, id));
}
}
//将模块设置到角色中去
role.setModules(moduleSet);
//保存角色
roleService.saveOrUpdate(role);
return "alist";
}
private String moduleIds;
public void setModuleIds(String moduleIds) {
this.moduleIds = moduleIds;
}