这个东西总会用到,可是开发起来甚是麻烦,下面是我做的,当然也参考了网友的作品。
参考文章:http://blog.csdn.net/weil001/article/details/4008016
根据自己的业务,角色分配菜单,改造如下:
1.选择一个角色弹出如下界面:

复选树代码在src.rar中
2.js代码调用
var roleId = record.get('roleId');// 选择角色的ID
var menuTree = new Ext.sys.CheckMenuTree({ roleId: roleId });
var win = new Ext.Window({
title: '角色授权', width:600,height:400,
modal: true, resizable: true, layout: 'fit',
items: [menuTree],
buttonAlign: 'center',
buttons: [{
text:'确定', iconCls:'icon_ok',
handler: function(){
var ids = menuTree.getCheckedNodes();// 被选中的树节点-json串形式
alert(ids );
// 自己业务代码
//
}
}, '-', {
text:'关闭', iconCls:'icon_cancle', handler: function(){ win.close(); win = null; }
}]
});
win.show();
3.表结构

4.后台实现
/**
* 描述:listMenu4CheckBox 菜单复选框树-查看所有
* @param request
* @return
* @CreateOn Jul 19, 2011 4:06:33 PM
* @author chun_chang
* @throws Exception
*/
public List<Map<String, Object>> listMenu4CheckBox(HttpServletRequest request) throws Exception{
String sql = "";
String roleId = request.getParameter("roleId");
// 1.提取当前角色下的所有的菜单ID
sql = "from cs_role_menu_map where roleId = ?";
String[] fields = { "menuId", "status" };
List<Map<String, Object>> listMenuId = this.menuDao.queryForListMap(fields, sql, new Object[] { roleId });
Map<String, String> statusMap = new HashMap<String, String>();
for(Map<String, Object> map2: listMenuId) {
statusMap.put(String.valueOf(map2.get("menuId")), String.valueOf(map2.get("status")));
}
// 2.取出所有菜单
sql = "select menuId, menuName,iconCls from cs_menu where parentMenuId = 0 order by menuId";
return this.subListMenu("0", statusMap);
}
private List<Map<String, Object>> subListMenu(String pid, Map<String, String> statusMap) throws Exception{
String sql = "select menuId, menuName,iconCls from cs_menu where parentMenuId = ? order by orderNum";
List<Map<String, Object>> list = menuDao.getJdbcTemplate().query(sql, new Object[]{pid}, new RowMapper<Map<String, Object>>(){
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", rs.getString("menuId"));
map.put("text", rs.getString("menuName"));
map.put("iconCls", rs.getString("iconCls"));
map.put("checked", "none");
return map;
}
});
for(Map<String, Object> map: list){
String menuId = String.valueOf(map.get("id"));
List<Map<String, Object>> list1 = this.subListMenu(menuId, statusMap);
map.put("children", list1);
String status = statusMap.get(menuId);// status的值为none,part,all-分别对应图片none.gif,part.gif,all.gif
if(StringUtils.isNotBlank(status)){
map.put("checked", status);
}
}
return list;
}

- 大小: 8.7 KB

- 大小: 31.3 KB
分享到:
相关推荐
`threeState`属性可以开启三态复选框模式,除了已选中和未选中,还有部分选中状态。 6. **API调用**:`Ext JS`提供了API接口,如`getChecked()`和`setChecked()`,用于获取所有选中的节点或改变特定节点的选中状态...
1. **启用复选框**: 在创建Tree Panel时,添加`checkboxModel`配置,并指定其`threeState`属性,可以开启三态复选(全选、部分选、未选)或二态复选(选与未选)。 ```javascript var treePanel = Ext.create('Ext....
可以设置`threeState`来决定是否支持三态复选(全选、部分选、全不选),以及`checkGroup`来分组复选框,使得同一组内的复选框只能有一个被选中。 4. **事件监听**:监听节点的`checkchange`事件,当用户改变复选框...
同时,通过设置`threeState`为`true`,我们可以启用三态复选框,即除了选中和未选中外,还有一种半选状态(部分子节点被选中)。然后,我们可以监听`checkchange`事件,这个事件会在复选框状态改变时触发。 以下是...
4. **多态性**:Ext Tree支持多种类型的节点,包括普通文本节点、复选框节点、图标节点等。每个节点可以有自己的属性和行为。 5. **数据绑定**:可以将树与数据源绑定,如JSON或XML,实现数据的动态加载和更新。...
5. **TriStateNodeUI.js**:这个文件可能是另一个Node UI实现,专门处理三态复选框的情况。在一些应用场景中,除了简单的选中和未选中外,还需要一个“部分选中”或“不确定”的状态,例如在文件系统中,父节点的复...