OA项目9:部门管理的上下级部门的功能实现

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。

一 功能分析:

  1,列表页面只显示一层的(同级的)部门数据,默认显示最顶级的部门列表。
  2,点击部门名称,可以查看此部门相应的下级部门列表。
  3,删除部门时,同时删除此部门的所有下级部门。

  4,上级部门的列表是有层次结构的(树形)。

  5,如果是修改:上级部门列表中不能显示当前修改的部门及其子孙部门。因为不能选择自已或自已的子部门作为上级部门。

二 首先,将前台页面作修改,内容如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3
 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 5 <html>
 6 <head>
 7     <title>部门列表</title>
 8     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 9     <script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script>
10     <script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script>
11     <script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script>
12     <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" />
13     <script type="text/javascript">
14     </script>
15 </head>
16 <body>
17
18 <div id="Title_bar">
19     <div id="Title_bar_Head">
20         <div id="Title_Head"></div>
21         <div id="Title"><!--页面标题-->
22             <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 部门管理
23         </div>
24         <div id="Title_End"></div>
25     </div>
26 </div>
27
28 <div id="MainArea">
29     <table cellspacing="0" cellpadding="0" class="TableStyle">
30
31         <!-- 表头-->
32         <thead>
33             <tr align=center valign=middle id=TableTitle>
34                 <td width="150px">部门名称</td>
35                 <td width="150px">上级部门名称</td>
36                 <td width="200px">职能说明</td>
37                 <td>相关操作</td>
38             </tr>
39         </thead>
40
41         <!--显示数据列表-->
42         <tbody id="TableData" class="dataContainer" >
43             <s:iterator value="#departmentList">
44             <tr class="TableDetail1 template">
45                 <td><s:a action="department_list?parentId=%{id}">${name}</s:a>&nbsp;</td>
46                 <td>${parent.name}&nbsp;</td>
47                 <td>${description}&nbsp;</td>
48                 <td><s:a onClick="return window.confirm(‘这将删除所有的下级部门,您确定要删除吗?‘)" action="department_delete?id=%{id}">删除</s:a>
49                     <s:a action="department_editUI?id=%{id}">修改</s:a>
50                 </td>
51             </tr>
52             </s:iterator>
53         </tbody>
54     </table>
55
56     <!-- 其他功能超链接 -->
57     <div id="TableTail">
58         <div id="TableTail_inside">
59             <s:a action="department_addUI"><img src="${pageContext.request.contextPath}/style/images/createNew.png" /></s:a>
60         </div>
61     </div>
62 </div>
63
64 <!--说明-->
65 <div id="Description">
66     说明:<br />
67     1,列表页面只显示一层的(同级的)部门数据,默认显示最顶级的部门列表。<br />
68     2,点击部门名称,可以查看此部门相应的下级部门列表。<br />
69     3,删除部门时,同时删除此部门的所有下级部门。
70 </div>
71
72 </body>
73 </html>

list.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3
 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 5
 6 <html>
 7 <head>
 8     <title>部门设置</title>
 9     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10     <script language="javascript" src="${pageContext.request.contextPath}/script/jquery.js"></script>
11     <script language="javascript" src="${pageContext.request.contextPath}/script/pageCommon.js" charset="utf-8"></script>
12     <script language="javascript" src="${pageContext.request.contextPath}/script/PageUtils.js" charset="utf-8"></script>
13     <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/style/blue/pageCommon.css" />
14 </head>
15 <body>
16
17 <!-- 标题显示 -->
18 <div id="Title_bar">
19     <div id="Title_bar_Head">
20         <div id="Title_Head"></div>
21         <div id="Title"><!--页面标题-->
22             <img border="0" width="13" height="13" src="${pageContext.request.contextPath}/style/images/title_arrow.gif"/> 部门信息
23         </div>
24         <div id="Title_End"></div>
25     </div>
26 </div>
27
28 <!--显示表单内容-->
29 <div id=MainArea>
30     <s:form action="department_%{id == null ? ‘add‘:‘edit‘}">
31         <div class="ItemBlock_Title1"><!-- 信息说明<DIV CLASS="ItemBlock_Title1">
32             <IMG BORDER="0" WIDTH="4" HEIGHT="7" SRC="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 部门信息 </DIV>  -->
33         </div>
34         <s:hidden name="id"></s:hidden>
35         <!-- 表单内容显示 -->
36         <div class="ItemBlockBorder">
37             <div class="ItemBlock">
38                 <table cellpadding="0" cellspacing="0" class="mainForm">
39                     <tr><td width="100">上级部门</td>
40                         <td>
41                             <s:select name="parentId" list="#departmentList"
42                              cssClass="SelectStyle" listKey="id" listValue="name" headerKey="" headerValue="==请选择部门=="/>
43                         </td>
44                     </tr>
45                     <tr><td>部门名称</td>
46                         <td><s:textfield name="name" cssClass="InputStyle"/> *</td>
47                     </tr>
48                     <tr><td>职能说明</td>
49                         <td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td>
50                     </tr>
51                 </table>
52             </div>
53         </div>
54
55         <!-- 表单操作 -->
56         <div id="InputDetailBar">
57             <input type="image" src="${pageContext.request.contextPath}/style/images/save.png"/>
58             <a href="javascript:history.go(-1);"><img src="${pageContext.request.contextPath}/style/images/goBack.png"/></a>
59         </div>
60     </s:form>
61 </div>
62
63 <div class="Description">
64     说明:<br />
65     1,上级部门的列表是有层次结构的(树形)。<br/>
66     2,如果是修改:上级部门列表中不能显示当前修改的部门及其子孙部门。因为不能选择自已或自已的子部门作为上级部门。<br />
67 </div>
68
69 </body>
70 </html>

saveUI.jsp

三 修改action对应的方法,修改后action内容如下:

  1 package cn.clear.oa.view.action;
  2
  3 import java.util.List;
  4
  5 import javax.annotation.Resource;
  6
  7 import org.springframework.context.annotation.Scope;
  8 import org.springframework.stereotype.Controller;
  9
 10 import cn.clear.oa.domain.Department;
 11 import cn.clear.oa.service.DepartmentService;
 12
 13 import com.opensymphony.xwork2.ActionContext;
 14 import com.opensymphony.xwork2.ActionSupport;
 15 import com.opensymphony.xwork2.ModelDriven;
 16
 17 @Controller
 18 @Scope("prototype")
 19 public class DepartmentAction extends ActionSupport implements ModelDriven<Department>{
 20
 21     /**
 22      *
 23      */
 24     private static final long serialVersionUID = 1L;
 25     @Resource
 26     private DepartmentService departmentService;
 27     private Department model = new Department();
 28     private Long parentId;
 29
 30     public Department getModel() {
 31         // TODO Auto-generated method stub
 32         return model;
 33     }
 34
 35
 36     public String list() throws Exception {
 37         List<Department> departmentList = null;
 38         if(parentId == null){
 39             departmentList = departmentService.findTopList();
 40         }else{
 41             departmentList = departmentService.findChildren(parentId);
 42         }
 43         ActionContext.getContext().put("departmentList", departmentList);
 44         return "list";
 45     }
 46     public String delete() throws Exception {
 47
 48         departmentService.delete(model.getId());
 49
 50         return "toList";
 51     }
 52     public String add() throws Exception {
 53         //封装信息到对象中
 54         Department parent = departmentService.findById(parentId);
 55         model.setParent(parent);
 56         departmentService.save(model);
 57         return "toList";
 58     }
 59     public String addUI() throws Exception {
 60         //准备departmentList数据
 61         List<Department> departmentList = departmentService.findAll();
 62         //放在值栈中的map中
 63         ActionContext.getContext().put("departmentList", departmentList);
 64         return "saveUI";
 65     }
 66     public String edit() throws Exception {
 67
 68         Department department = departmentService.findById(model.getId());
 69         department.setName(model.getName());
 70         department.setDescription(model.getDescription());
 71         department.setParent(departmentService.findById(parentId));//设置所属的上级部门
 72         departmentService.update(department);
 73         return "toList";
 74     }
 75     public String editUI() throws Exception {
 76         //准备departmentList数据
 77         List<Department> departmentList = departmentService.findAll();
 78         //放在值栈中的map中
 79         ActionContext.getContext().put("departmentList", departmentList);
 80
 81         Department department = departmentService.findById(model.getId());
 82         //将对象放在栈顶
 83         ActionContext.getContext().getValueStack().push(department);
 84         //回显上级部门
 85         if(department.getParent()!=null){
 86             parentId = department.getParent().getId();
 87         }
 88         return "saveUI";
 89     }
 90
 91     //------
 92     public Long getParentId() {
 93         return parentId;
 94     }
 95
 96
 97     public void setParentId(Long parentId) {
 98         this.parentId = parentId;
 99     }
100
101 }

DepartmentAction.java

四 在显示顶级部门和下级部门时需要增加service方法。直接在service方法中引入操作数据库的代码,所以service层内容修改如下(对于分层结构的调整,后面还要进行修改):

 1 package cn.clear.oa.service;
 2
 3 import java.util.List;
 4
 5 import cn.clear.oa.domain.Department;
 6
 7 public interface DepartmentService {
 8
 9     List<Department> findAll();
10
11     void delete(Long id);
12
13     void save(Department department);
14
15     Department findById(Long id);
16
17     void update(Department department);
18     /**
19      * 查询顶级部门列表
20      * @return
21      */
22     List<Department> findTopList();
23     /**
24      * 查询子部门列表
25      * @return
26      */
27
28     List<Department> findChildren(Long parentId);
29
30
31 }

DepartmentService.java

 1 package cn.clear.oa.service.impl;
 2
 3 import java.util.List;
 4
 5 import javax.annotation.Resource;
 6
 7 import org.hibernate.SessionFactory;
 8 import org.springframework.stereotype.Service;
 9 import org.springframework.transaction.annotation.Transactional;
10
11 import cn.clear.oa.dao.DepartmentDao;
12 import cn.clear.oa.domain.Department;
13 import cn.clear.oa.service.DepartmentService;
14 @Service
15 @Transactional
16 @SuppressWarnings("unchecked")
17 public class DepartmentServiceImpl implements DepartmentService{
18
19     @Resource
20     private DepartmentDao departmentDao;
21
22     @Resource
23     private SessionFactory sessionFactory;
24
25
26     public List<Department> findAll() {
27
28         return departmentDao.findAll();
29     }
30
31     public void delete(Long id) {
32
33         departmentDao.delete(id);
34
35     }
36
37     public void save(Department department) {
38
39         departmentDao.save(department);
40     }
41
42     public Department findById(Long id) {
43
44         return departmentDao.findById(id);
45     }
46
47     public void update(Department department) {
48
49         departmentDao.update(department);
50     }
51
52     public List<Department> findTopList() {
53         // TODO Auto-generated method stub
54         return sessionFactory.getCurrentSession().createQuery(//
55                 "FROM Department d WHERE d.parent IS NULL")//
56                 .list();
57     }
58
59     public List<Department> findChildren(Long parentId) {
60         // TODO Auto-generated method stub
61         return sessionFactory.getCurrentSession().createQuery(//
62                 "FROM Department d WHERE d.parent.id = ?")//
63                 .setParameter(0, parentId)
64                 .list();
65     }
66
67 }

DepartmentServiceImpl.java

五 因为删除上级部门要连同下级部门一并删除,所以要使用到级联操作;而我们service层直接使用session会导致懒加载的问题,所以要修改下映射文件内容,如下:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6 <hibernate-mapping package="cn.clear.oa.domain">
 7     <class name="Department" table="oa_department">
 8         <id name="id"><generator class="native"/></id>
 9         <property name="name"/>
10         <property name="description"/>
11         <!-- users属性,本类与User的1对多 -->
12         <set name="users">
13             <key column="departmentId"></key>
14             <one-to-many class="User"/>
15         </set>
16         <!-- parent属性,本类与(上级)Department的多对1 -->
17         <many-to-one name="parent" class="Department" column="parentId" lazy="false"></many-to-one>
18         <!-- children属性,本类与(下级)Department的1对多 -->
19         <set name="children" cascade="delete" lazy="false">
20             <key column="parentId"></key>
21             <one-to-many class="Department"/>
22         </set>
23     </class>
24 </hibernate-mapping>

Department.hbm.xml

所有一切都修改完毕之后,启动服务器,测试即可。

时间: 2024-10-24 19:59:28

OA项目9:部门管理的上下级部门的功能实现的相关文章

系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构

系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这个实体有关联关系. 3,每个实体中都有什么属性? 1,主键.推荐使用代理主键 2,关联关系属性.在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性.有几个端指向本类,本类中就有几个关联关系属性. 3,一般属性.分析所有有关的页面,找出表单中要填写的或是在显示页面中要显示的信息等.

C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理

前面一篇随笔企业号的一些基础信息,以及介绍如何配置企业号的回调方式实现和企业号服务器进行沟通的桥梁.本篇主要还是继续介绍企业号的开发工作的开展,介绍微信企业号通讯录管理开发功能,介绍其中组织机构里面如何获取和管理部门的信息等内容. 1.企业组织的创建和配置 首先我们可以在企业号的管理后台里面创建一个组织机构,里面创建一些部门和人员列表,方便我们开发和使用. 例如创建一个广州爱奇迪的根结构,然后在其中在创建一些组织机构,如下图所示. 然后给组织结构根节点“广州爱奇迪”增加一个管理员权限,以后再开发

OA项目7:系统管理之部门管理

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 根据需求,根据前台页面功能设计实体,创建javabean.Department.java,内容如下(先不处理上下级部门): 1 package cn.clear.oa.domain; 2 3 public class Department { 4 5 private Long id; 6 private String name; 7 private String

OA项目之部门管理的功能实现

1.部门管理和岗位管理的功能实现是差不多的,首先看下都有哪些功能如图:(这里需要注意的比如如何显示上级部门?在添加的时候如何以树的结构来显示?等等需要非常注意的,本人在这其中遇到很多很多的错误,修改找错大改半天的时间,真的是看起来容易,动起手来都是错!!) 2.分析完功能,首先要做的就是几个请求?需要几个页面?需要几个方法?知道了以后先写DepartmentAction 解释:其中list方法是显示数据库中的相关数据,包括上级部门,上级部门是通过parent.name属性获取的,等下在jsp页面

OA项目10:部门管理的三个细节的实现

部门管理遗留三个细节问题,及其处理方法: 1.当选择了子部门列表,希望增加返回上一级按钮,点击可以回到上一级的部门列表: 1)在list页面添加返回上一级按钮(在新建按钮后面),如下: <s:a action="department_list?parentId=%{#parent.parent.id}"><img src="${pageContext.request.contextPath}/style/blue/images/button/ReturnTo

2、部门与项目人员组成 - 部门管理经验谈

在部门的管理中,首要的是部门的组成和部门人员的组成,这个是整个部门进行规划和开展工作的基本点.笔者在进行部门管理的过程中,部门人员安排有限,这里仅根据笔者以前去过的公司的一些情况进行描述. 一.部门的组成.在项目管理知识体系指南中,对部门的类型进行的划分,分为“职能型.矩阵型.项目型”三种,下面对这三种进行下描述: 1.职能型: 职能型主要是针对部门内部的各个人员的职能做划分.从上图中能够看出,职能型的人员权限和职责相对比较弱,项目经理的权限很少或没有,不适合一般的IT软件项目型的部门结构.职能

OA项目11:部门列表树状显示功能及其他代码优化

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 使用递归使部门列表树状显示: 1.写一个工具类,实现通过顶级部门查询所有,具体如下: 1 package cn.clear.oa.util; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.List; 6 7 import cn.clea

OA项目12:系统管理之用户管理

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 之前在第8节时已经将User实体及映射文件建立好了,所以设计实体已经完成了,下面来做功能了. 二 我们对照静态页面看用户管理页面分析发现,增删改查功能跟之前一样,多了一个初始化密码的请求.当然,这不是问题,下面开始做功能吧! 三 开发: 1.写action及struts2映射,具体如下: 1)UserAction.java: 1 package cn.

10、后记:部门管理总结 - 部门管理经验谈

此系列博文写到这里,笔者觉得应该告一段落了.关于部门管理,应该还有其它需要记录的内容,但是笔者在这里就与大家做个部门管理的总结吧. 部门管理,从要点上来说,就包括下面三个内容: 一.管人: 部门经理在实际的工作过程中,有一部分工作是对部门人员进行管理.比如部门人员的职位需求,编制要求,项目实际需要等等.但是,部门经理需要适当的放权,也就是说,部门经理要根据部门的业务,在金字塔型的管理层上,将管理权分配给下面的各个经理,这样才能让部门经理的时间和精力放在部门的业务获取和开展上,更好的为部门服务.