一、最近需要使用树形展示权限,所以研究了一下Java Tree,其实java中有不少Tree展示,具体有如下几种:
1.dtree
2.ztree(国内的,api全中文,我用这个)
3.JTree
4.dhtmlxTree(国外的,种类齐全),网址为:http://dhtmlx.com/docs/products/dhtmlxTree/index.shtml
##以后是我找的还不错的Tree组件,还有很多!
二、我的代码(互联交易平台一版代码,2级树simpleData形式)
1.Action中的代码
/**
* 打开角色授权页面
* @return
* @author mengxianjun
* @throws Exception
* @date 2011-4-12 下午01:30:19
*/
public String openImpower() throws Exception {
try
{
employeeRole = employeeRoleService.queryTEmployeeRole(roleNum);
userHavePrivSet = employeeRole.getTEmployeePriv();
search = new ArrayList();
if(userHavePrivSet != null){
Iterator it = userHavePrivSet.iterator();
for(;it.hasNext();){
TEmployeePriv e = (TEmployeePriv) it.next();
search.add(e.getPrivNum());
}
}
//TEmployeePrivList = privService.queryAllPriv_noPage();//查询出系统中所有的权限
TEmployeePrivList = privService.queryUnauthorizedPriv_noPage(search);//查询出系统中所有的权限
successPath = "/jsp/priv/role/impower.jsp";
/**合成树--开始**/
List<TMenu> myMenuList = menuDao.queryAll();
List<PrivJSON> jsonList = new ArrayList<PrivJSON>();
for( int i=0; i<myMenuList.size(); i++ )
{
PrivJSON json = new PrivJSON();
TMenu menu = myMenuList.get(i);
json.setId(menu.getId().getMenuId());
json.setpId("0");
json.setName(menu.getMenuName());
json.setOpen(true);
jsonList.add(json);
}
List<TEmployeePriv> myPrivList = privService.queryAllPriv_noPage();
for( int j=0; j<myPrivList.size();j++ )
{
TEmployeePriv priv = myPrivList.get(j);
PrivJSON json2 = new PrivJSON();
json2.setId(priv.getPrivNum());
json2.setpId(priv.getMenuId1());
json2.setName(priv.getPrivName());
json2.setPrivNum(priv.getPrivNum());
for(int i=0;i<search.size();i++)
{
if( priv.getPrivNum().equals(search.get(i)) )
{
json2.setOpen(true);
json2.setChecked(true);
}
}
jsonList.add(json2);
}
JSONArray myjsonObj = JSONArray.fromObject(jsonList);//将权限集合,转成JSON数组
this.getRequest().setAttribute("myjsonObj",myjsonObj);
return SUCCESS;
}
catch( Exception e )
{
log.error("RoleAction's openImpower() a error: "+ e.fillInStackTrace());
errorPath = "/jsp/error/error.jsp";
return "error";
}
}
/**
* 角色授权
* @return
* @author mengxianjun
* @throws Exception
* @date 2011-4-12 下午01:27:41
*/
@SuppressWarnings({ "unchecked", "static-access" })
public String impower() throws Exception {
try
{
String[] privList = privSelect.split(";"); //获得前台传来的权限Num
employeeRole = employeeRoleService.queryTEmployeeRole(roleNum);
Set<TEmployeePriv> mySet = employeeRole.getTEmployeePriv();
forOldTRprRecord( mySet );//日志前得到旧权限(修改前的权限集合)--授权
mySet.clear();//清空权限
if( null != privList && privList.length>0 )
{
for( int i=1; i<privList.length; i++ )
{
mySet.add( privService.queryPrivByNum(privList[i]) );
}
}
/**
* 修改角色的权限
*/
employeeRoleService.updateTEmployeeRoleForImpower(employeeRole);
employeeRoleCtrl.loadEmployeeRole();
rolePrivCtrl.loadRolePriv();
doRolePrivRecord();//记录日志1(修改授权时间、原因)--授权
doRprRecord();//记录日志2(修改前的权限集合)--授权
return queryAllRole();
}
catch( Exception e )
{
log.error("RoleAction's impower() a error: "+ e.fillInStackTrace());
errorPath = "/jsp/error/error.jsp";
return "error";
}
}
2.js
<SCRIPT LANGUAGE="JavaScript">
var zTreeObj;
var setting = {checkable:true,treeNodeKey:"id",treeNodeParentKey:"pId",isSimpleData:true}; //zTree的参数配置,深入使用请参考 API 文档(参数说明 -- setting 详解)
/*var zNodes = [
{name:"test1", open:true, nodes:[
{name:"test1_1"}, {name:"test1_2"}]},
{name:"test2", open:true, nodes:[
{name:"test2_1"}, {name:"test2_2"}]}
];*/ //zTree的数据属性,深入使用请参考 API 文档(参数说明 -- zTreeNodes 详解)
var myjsonObj = ${requestScope.myjsonObj};
var zNodes = myjsonObj;
$(document).ready(function(){
zTreeObj = $("#treeDemo").zTree(setting, zNodes);
});
function expandAll(expandSign) {
zTreeObj.expandAll(expandSign);
}
function checkAllTreeNode(checked) {
var oldNodes = zTreeObj.getNodes();
var oldcheckNum = zTreeObj.getCheckedNodes(checked).length;
zTreeObj.checkAllNodes(checked);
var newcheckNum = zTreeObj.getCheckedNodes(checked).length;
if (newcheckNum != oldcheckNum) zTreeObj.checkAllNodes(checked);
}
/*测试用树授权*/
function testImpower()
{
var temp ="";
var nodes = zTreeObj.getCheckedNodes();
for( var i=0; i<nodes.length; i++ ){
if(nodes[i].privNum != ''){
temp = temp+";"+nodes[i].privNum;
}
}
alert(temp);
document.getElementById('privSelect').value=temp;
}
/*分配运维权限*/
function allotYunwei()
{
var privNum = ["sys_config","sys_config_a","sys_config_b"];
for(var i=0;i<privNum.length;i++){
var node = zTreeObj.getNodeByParam("privNum", privNum[i]);
node.checked=true;
zTreeObj.updateNode(node,true);
//zTreeObj.selectNode(node);//选中指定的节点
}
}
</SCRIPT>
3.jsp页面调用
</div>
<div class="zTreeDemoBackground">
<button onclick="expandAll(true);">全展开</button>|<button onclick="expandAll(false);">全关闭</button>
<button onclick="checkAllTreeNode(true);">全选</button>|<button onclick="checkAllTreeNode(false);">全不选</button>
<button onclick="testImpower();">测试</button>
<button onclick="allotYunwei();">运维授权</button><br/><br/>
<ul id="treeDemo" class="tree"></ul>
</div>
####具体参见附件,在此留作备忘!!
分享到:
相关推荐
Javac源代码隐藏在OPENJDK项目中,这是一个开源的Java实现,包含了Java虚拟机(JVM)、类库以及其他相关工具。 OPENJDK项目由全球开发者社区共同维护,提供了一个开放的环境来查看、学习和改进Java的编译器和其他...
SWT提供了几种布局管理器,如FillLayout、GridLayout、FormLayout等,用于控制组件在容器中的排列方式和大小调整。 5. SWT与JFace JFace是建立在SWT之上的抽象层,简化了SWT的使用,提供了一些高级组件,如对话框...
DWR (Direct Web Remoting) 是一个开源的Java库,它允许Web应用程序实现AJAX(Asynchronous JavaScript and XML)功能,从而提供更丰富的用户界面和交互性。DWR的核心功能是通过在浏览器和服务器之间创建动态的、...
SWT 提供了几种布局管理器,如 FillLayout、GridLayout、 MigLayout 和 FormLayout,用于控制组件在容器中的排列方式。通过灵活使用布局管理器,可以实现各种复杂的界面设计。 4. **事件处理**: SWT 使用事件...
此外,还有一些开源项目提供了Java技术的替代实现,比如GNU Compiler for Java(GCJ)和GNU Classpath等。 ##### 2. **版本发布** Java的版本更新非常频繁,每个版本都会引入新的特性和改进。从最初的Java 1.0到...
本例"JSP实现树型结构TREE"提供了一个使用JSP(JavaServer Pages)、EXTJS(一个前端JavaScript框架)、JSON(JavaScript Object Notation)以及MySQL数据库来创建树形结构的示例,这对于初学者或开发者来说,是一个...
在本例中,开发者希望通过Extjs的Tree组件结合JSON数据格式来展示一种分层结构的信息。这种应用场景常见于文件管理、组织架构展示等需要展示层级关系的场景。 ### 2. Struts2框架的应用 #### 知识点概述: Struts2...
Java虚拟机(JVM)是一种能够执行字节码的虚拟计算机,其主要功能包括: - **加载Class文件**:将Class文件加载到内存中。 - **执行字节码**:通过解释器逐行解释执行字节码。 - **动态链接**:将字节码中的符号引用...
在JMeter中,性能测试组件主要分为以下几类:采样器、监听器、断言、定时器、配置元素、前置处理器和后置处理器。这些组件可以组合起来创建复杂的测试计划,帮助测试人员更好地理解和优化系统的性能表现。 #### 三...
- **数据结构**:数组(Array)、链表(List)、队列(Queue)、栈(Stack)、树(Tree)、图(Graph)等基本概念及其在Java中的实现。 - **算法**:排序算法、查找算法等常见算法的原理及Java实现。 #### 二、Java Web开发 ##...
同时,SWT还提供了几种布局管理器,如FillLayout、GridLayout、FormLayout等,帮助我们组织这些组件在窗口中的位置。例如,使用GridLayout可以轻松创建网格布局: ```java GridLayout layout = new GridLayout(2, ...
SWT (Standard Widget Toolkit) 是一个开源的GUI组件库,主要用于Java平台。它是Eclipse UI框架的基础,并被广泛应用于各种Java应用中。相比于早期的AWT和后来的Swing,SWT提供了一种更加本地化外观的用户体验,并...
在这个“收集树形菜单显示集锦”中,我们将会探讨几种不同的树形菜单实现方式,包括xtree、tree、MzTreeView10、jsptree以及ajaxtree2。 1. xtree: Xtree是一种早期的基于JavaScript的树形菜单库,它允许开发者创建...
lichessbot-java的主要组件可能包括以下几个部分: 1. **API接口**:lichess提供了公开的RESTful API,使得开发者能够通过发送HTTP请求来获取或更新游戏状态、用户信息等。lichessbot-java会使用这些API与lichess...
通过使用JavaServer Faces (JSF) 和 RichFaces 的 `<t:tree>` 组件,可以高效地构建出功能丰富且具有良好用户体验的树形菜单。选择合适的数据结构和构建策略对于确保系统的性能和可维护性至关重要。此外,通过合理...
当下载并解压"libs"文件夹后,你会发现以下几种类型的jar包: 1. **Cocos2dx.jar**:这是Cocos2d-x的核心库,包含所有基本的游戏开发功能。 2. **Box2D.jar**:包含了Box2D物理引擎的Java实现。 3. **Extension.jar...
通过这种方法,工程师可以系统地识别出那些可能导致整个系统失败的故障模式,然后进行定量和定性的分析,以计算系统失效的概率,并对系统的关键组件和故障模式进行排序。 OpenFTA是一个开源的故障树分析软件工具,...
SwingEC,全称为"Swing Enhanced Components",是一个开源项目,旨在为Java Swing库提供一系列增强和定制的组件,以提升基于Java的桌面应用程序的用户体验和开发效率。Swing是Java平台上用于构建图形用户界面(GUI)...