SSHExtjs用户根据角色加载不同的树二级节点_第1页
SSHExtjs用户根据角色加载不同的树二级节点_第2页
SSHExtjs用户根据角色加载不同的树二级节点_第3页
SSHExtjs用户根据角色加载不同的树二级节点_第4页
SSHExtjs用户根据角色加载不同的树二级节点_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SSH2+Extjs用户根据角色加载不同的树二级节点说明:通过登录界面,用户输入名和密码,系统获取到用户名和密码后与与数据库进行比对:如果该用户是系统用户,则用户成功登录并跳转到新的界面。当该用户要查看相应的功能树的时候,系统会先获取用户登录的username,通过该用户名查询到在数据库中给该用户所赋予的角色id,然后再根据这个角色的id来查找这个角色所拥有的树的功能子节点,然后将查询到的资源按照tree所要求的json形式输出到前台从而显示出tree。通过点击tree的节点,将该node的id发送的后台,后台自动加载该id对应的子节点并加载实现相应的树。本功能实现没有添加service层,A

2、ction直接调用Dao层的实现方法1. 实现界面展示首先是登录界面1,登录成功后跳转图片2点击图片2中圈红的点击后便进入tree的显示图片3,能够看到系统已经自动显示到二级树节点点击图片3中的节点ShangjiShiyan,系统会自动查找该node的id对应的子节点并加载显示这里可以把树节点设置成多层,这里仅是用到三级节点便到叶子节点就结束了。2. 数据库设计思路:通过Users表中查找系统用户UserName对应的UserID属性,然后通过连接表userrolerelationship找到该用户对应Role表的RoleID属性,在通过连接表roleresourcerelationship查

3、找到该RoleID对应的Resource,并把这些resource放到List中输出。具体的表如下所示:(1)users表(UserName就是用户登录时的用户名)(2)userrolerelationship表(分别对应上表中的UserID和下表的RoleID)(3)role表(4)Roleresourcerelationship表(5)Resource表(6)Tree表(json属性结构标准表,resource需要转换成tree形式输出)注意: Mysql中连接表的外键设定(UserID找到RoleID)(1)在Mysql中设计三个连接表Users表Userrolerelationship

4、表(连接表)Role表这里通过Users表的Username到连接表中查找连接的表,然后通过连接表查找要连接的RoleID。在连接之前,首先要先确定Users表和Role表的主键类型,必须和连接表中这两列的属性完全一致,否则无法连接。在各自的表中id和RoleID也都是Int10先完善Users和Role表中的数据,在填写连接表中的内容(2)确定多表之间的关联清空连接表中的内容点击+添加外键,连接Users表点击+添加外键,连接Role表3. 前台界面设计说明:通过登录界面,系统将用户登录的时候输入的用户名保存则session对象中,这样能够方便其他的Action访问该username,从而确

5、定该用户名的权限前台界面树界面XueshengGuanli.js:Ext.onReady( function() / 设定一个根节点var rootAsy = new Ext.tree.AsyncTreeNode( text:'学生管理', iconCls : 'icon-treeroot', id:'0', expanded:true);/设定一个树加载器,当树节点展开时,延迟加载子节点var depTreeLoader = new Ext.tree.TreeLoader(preloadChildren : true,dataUrl : 

6、9;Tree.action'/,baseParams : / action : 'getAllDlb'/ );/加载树的触发事件 depTreeLoader.on('beforeload',function(depTreeLoader,node)this.baseParams.id=node.id; /通过这个传递参数,这样就可以点一个节点出来它的子节点来实现异步加载 ,depTreeLoader);/显示的 treevar testtree = new Ext.tree.TreePanel(autoScroll : true,bodyStyle : &

7、#39;background-color:white',animate : true,containerScroll : true,root : rootAsy,loader : depTreeLoader);/将上面的testree放到Viewport中就可以显示树型结构了4.查找Tree.action(通过配置文件)(1)根据testree的提交的dataUrl,查找名为Tree的Action的java文件的位置。首先通过Struts.xml来找到Tree对应的action在Spring配置文件中的名称<package name="extjs" exten

8、ds="json-default" namespace="/"><!- 根据不同用户对应的角色加载不同的服务Tree选项 -> <action name="Tree" class="TreeAsyLoaderAction"> <result type="json"> <param name="root">menusList</param> </result> </action></

9、package>(2)通过Spring配置文件applicationContext.xml查找TreeAsyLoaderAction<!- 根据用户对应的系统角色加载相应的系统功能 :通过id找到TreeAsyLoaderAction,在其中直接调用Dao层内容-><bean id="TreeDAO" class="org.dao.imp.TreeDaoImp"><property name="sessionFactory"><ref bean="sessionFactory&

10、quot; /></property></bean><bean id="TreeAsyLoaderAction" class="org.action.TreeAsyLoader"><property name="resourceDao"><ref bean="ResourceDAO" /></property></bean><!- 通过用户的角色找到对应的资源内容,需要以下几个表的关联。其中Roleresourcerel

11、ationshipDAO为中介表,这三个表需要通过Hibernate的逆向工程实现数据库的转换。只列出一个,剩下的四个省略-> <bean id="UserrolerelationshipDAO" class="org.dao.imp.UserrolerelationshipDAO"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean>5

12、. 核心Action:TreeAsyLoader.javapackage org.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class TreeAsyLoader extends ActionSupport private List<Tree> menusList; /与Struts.xml中的参数同名,存放读取出来的Resource(都已经转换成了Tree类型)private TreeDao treeDao;/直接调

13、用Dao层的方法private ResourceDao resourceDao; /直接调用Dao层查找资源的方法private Dlb dlb;private String username1;private Integer roleid1;/省去对应的setter和getter方法 public String execute() throws Exception System.out.println("Listing Tree.!");/* 在Struts中通过ServletActionContext的request方法来获取前台参数 */HttpServletRequ

14、est req = ServletActionContext.getRequest();/查找该用户对应的权限username1=ActionContext.getContext().getSession().get("username").toString();String id1 = req.getParameter("id");/读取前台传来的用户点击的node的idint id=Integer.parseInt(id1); tryList<Resource> re =resourceDao.findResourceByRoleId(u

15、sername1);/通过用户名找到用户对应角色,再找到角色对应的资源int a = new int10;/数组的长度应该足够长,保证放下所有的数据,包括资源叶子节点到树根所经过的节点int j=0;for(Resource r : re)/将根节点所在的路径放在一个一维数组中存储for(;j<a.length-1;j+) aj = r.getResourceId();aj+1 = r.getParentId();r = resourceDao.getReourceById(r.getParentId();if (r = null) j+;break;/通过获得用户点击的node的id以

16、及该id所涉及到的子节点来进行加载List<Resource> menuList1 = resourceDao.findByParentIdAndIds(id,a);System.out.println("Tree:"+ menuList1);menusList = new ArrayList<Tree>();/将返回的数据转换成系统识别的tree的类型for (Resource r : menuList1) Tree tn = new Tree();tn.setId(r.getResourceId();tn.setText(r.getResourc

17、eName();tn.setPid(r.getParentId();if (r.getLeaf()=true) tn.setLeaf(true); else tn.setLeaf(false);menusList.add(tn);catch(Exception e)menusList = null;System.out.println(e.toString();return SUCCESS;6. Dao层实现方法(1)Action通过过调用DaoImp的方法resourceDao.findResourceByRoleId(username1)如下:public List<Resource

18、> findResourceByRoleId(String username)try /注意三表连接的查询语句的编写:列属性的大小写要和model中生成的属性值形式一致String queryStr = "select ro from Users uss,Role ro,Userrolerelationship upp "+ "where ro.roleId = upp.role.roleId and uss.userId = upp.users.id and uss.userName = '"+ username+"'&

19、quot;List<Role> listt =getHibernateTemplate().find(queryStr); /先查询出RoleID,然后再根据RoleID查询对应的ResourcesString queryStrS = "select re from Role ro,Resource re,Roleresourcerelationship rr "+ "where ro.roleId = rr.role.roleId and re.resourceId = rr.resource.resourceId and ro.roleId = "+ listt.get(0).getRoleId();List<Resource> listResource =getHibernateTemplate().find(queryStrS)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论