实战3--设计管理模块, 第4步, 新增模块, 部门管理

一... 设计实体类/表

1. 写实体类Department.java:

package cn.itcast.oa.domain;

public class Department {
	private Long id;
	private String name;
	private String description;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
}

2. 写映射文件Department.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.oa.domain">
	<class name="Department" table="itcast_department">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name" />
		<property name="description" />
	</class>
</hibernate-mapping>

3. 把实体类加入到hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 2. other configuration --> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <property name="connection.pool_size">1</property> <!--3. mapping --> <mapping resource="cn/itcast/oa/domain/User.hbm.xml" /> <mapping resource="cn/itcast/oa/domain/Role.hbm.xml" /> <mapping resource="cn/itcast/oa/domain/Department.hbm.xml" /> </session-factory> </hibernate-configuration>

4. 测试类生成表:SpringTest.java

package cn.itcast.oa.test;

import org.hibernate.SessionFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
	@Test
	public void testSessionFactory() throws Exception{
		SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory");
		System.out.println(sessionFactory);
		
	}	
}

确认生成表成功!!!  

二.. 分析有几个功能, 对应几个请求

1. 搭action框架

    注意: @Controller  @Scope("prototype")

package cn.itcast.oa.view.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@Controller @Scope("prototype") public class DepartmentAction extends ActionSupport{ /*列表*/ public String list() throws Exception { return "list"; } /*删除*/ public String delete() throws Exception { return "toList"; } /*添加页面*/ public String addUI() throws Exception { return "saveUI"; } /*添加*/ public String add() throws Exception { return "toList"; } /*修改页面*/ public String editUI() throws Exception { return "saveUI"; } /*修改*/ public String edit() throws Exception { return "toList"; } }

2. 配置struts.xml:

<!-- 部门管理 -->
 <action name="department_*" class="departmentAction" method="{1}"> 
 	<result name="list">/WEB-INF/jsp/departmentAction/list.jsp</result> 
 	<result name="saveUI">/WEB-INF/jsp/departmentAction/saveUI.jsp</result> 
	<result name="toList" type="redirectAction">department_list</result> 
 </action> 

3. 写两个简单的jsp文件, 验证成功

4. 开始完善action:

package cn.itcast.oa.view.action;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.itcast.oa.domain.Department;
import cn.itcast.oa.service.DepartmentService;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Controller
@Scope("prototype")
public class DepartmentAction extends ActionSupport implements ModelDriven<Department>{
	
	@Resource
	private DepartmentService departmentService;
	
	private Department model  = new Department();
	/*列表*/
	public String list() throws Exception {
		List<Department> departmentList = departmentService.findAll();
		ActionContext.getContext().put("departmentList", departmentList);
		return "list";
	}
	/*删除*/
	public String delete() throws Exception {
		departmentService.delete(model.getId());
		return "toList";
	}
	/*添加页面*/
	public String addUI() throws Exception {		
		return "saveUI";
	}
	/*添加*/
	public String add() throws Exception {
		departmentService.save(model);
		return "toList";
	}
	/*修改页面*/
	public String editUI() throws Exception {
		/*准备回显数据*/
		Department department = departmentService.getById(model.getId());
		ActionContext.getContext().getValueStack().push(department);
		return "saveUI";
	}
	/*修改*/
	public String edit() throws Exception {
		// 1. 从数据库取出原对象
		Department department =  departmentService.getById(model.getId());
		//2. 设置要修改的属性
		department.setName(model.getName());
		department.setDescription(model.getDescription());
		//3. 更新到数据库
		departmentService.update(department);
		return "toList";
	}
	
	public Department getModel() {
		// TODO Auto-generated method stub
		return model;
	}
}

 

5. 写service接口, DepartmentService.java, 是在action里调用方法的时候ctrl+1创建的方法

package cn.itcast.oa.service;
import java.util.List;
import cn.itcast.oa.domain.Department;

public interface DepartmentService {
	List<Department> findAll();
	void delete(Long id);
	void save(Department model);
	Department getById(Long id);
	void update(Department department);
}

6. 创建DepartmentService接口的实现类, DepartmentServiceImpl.java

    注意@Service, @Transactional, 用Dao的时候用@Resource

package cn.itcast.oa.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.itcast.oa.dao.DepartmentDao;
import cn.itcast.oa.domain.Department;
import cn.itcast.oa.service.DepartmentService;

@Service
@Transactional
public class DepartmentServiceImpl implements DepartmentService{
	@Resource
	private DepartmentDao departmentDao;
	public List<Department> findAll() {
		return departmentDao.findAll();
	}

	public void delete(Long id) {
		departmentDao.delete(id);
	}

	public void save(Department model) {
		departmentDao.save(model);
	}

	public Department getById(Long id) {
		return departmentDao.getById(id);
	}

	public void update(Department department) {
		departmentDao.update(department);
	}
}

三.. 创建Dao接口和实现类

1. Dao接口, DepartmentDao.java, 注意要继承BaseDao接口

package cn.itcast.oa.dao;
import cn.itcast.oa.base.BaseDao;
import cn.itcast.oa.domain.Department;
public interface DepartmentDao extends BaseDao<Department>{
}

2. 实现类DepartmentDaoImpl.java,

   注意1. 继承BaseDaoImpl, 2. 实现DepartmentDao 3. @Repository

package cn.itcast.oa.dao.impl;
import org.springframework.stereotype.Repository;
import cn.itcast.oa.base.BaseDaoImpl;
import cn.itcast.oa.dao.DepartmentDao;
import cn.itcast.oa.domain.Department;
@Repository
public class DepartmentDaoImpl extends BaseDaoImpl<Department> implements DepartmentDao{

}

  

四.. 写jsp页面:

新建jsp路径下的departmentAction文件夹, 创建两个jsp文件夹, list.jsp,和 saveUI.jsp

list.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%String path = request.getContextPath();%>
<html>
<head>
    <title>部门列表</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       <script language="javascript" type="text/javascript" src=<%=path%>/script/jquery.js"></script>
    <script language="javascript" type="text/javascript" src=<%=path%>/script/pageCommon.js"></script>
    <script language="javascript" type="text/javascript" src=<%=path%>/script/PageUtils.js"></script>
   
    <link type="text/css" rel="stylesheet" href="<%=path%>/style/blue/pageCommon.css"/>
    <script type="text/javascript">
    </script>
</head>
<body>
 
<div id="Title_bar">
    <div id="Title_bar_Head">
        <div id="Title_Head"></div>
        <div id="Title"><!--页面标题-->
            <img border="0" width="13" height="13" src="<%=path%>/style/images/title_arrow.gif"/> 部门管理
        </div>
        <div id="Title_End"></div>
    </div>
</div>

<div id="MainArea">
    <table cellspacing="0" cellpadding="0" class="TableStyle">
       
        <!-- 表头-->
        <thead>
            <tr align=center valign=middle id=TableTitle>
            	<td width="150px">部门名称</td>
				<td width="150px">上级部门名称</td>
				<td width="200px">职能说明</td>
				<td>相关操作</td>
            </tr>
        </thead>

		<!--显示数据列表-->
        <tbody id="TableData" class="dataContainer" datakey="departmentList">
        
        <s:iterator value="#departmentList">
			<tr class="TableDetail1 template">
				<td>${name} </td>
				<td>${parent.name} </td>
				<td>${description} </td>
				<td>
					<s:a action="department_delete?id=%{id}" onclick="return window.confirm('这将删除所有的下级部门,您确定要删除吗?')">删除</s:a>
					<s:a action="department_editUI?id=%{id}">修改</s:a>
				</td>
			</tr>
		</s:iterator>	
			
        </tbody>
    </table>
    
    <!-- 其他功能超链接 -->
    <div id="TableTail">
        <div id="TableTail_inside">
            <s:a action="department_addUI"><img src="<%=path%>/style/images/createNew.png" /></s:a>
        </div>
    </div>
</div>

<!--说明-->	
<div id="Description"> 
	说明:<br />
	1,列表页面只显示一层的(同级的)部门数据,默认显示最顶级的部门列表。<br />
	2,点击部门名称,可以查看此部门相应的下级部门列表。<br />
	3,删除部门时,同时删除此部门的所有下级部门。
</div>

</body>
</html>

saveUI.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%String path = request.getContextPath();%>
<html>
<head>
	<title>部门设置</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="javascript" type="text/javascript" src=<%=path%>/script/jquery.js"></script>
    <script language="javascript" type="text/javascript" src=<%=path%>/script/pageCommon.js"></script>
    <script language="javascript" type="text/javascript" src=<%=path%>/script/PageUtils.js"></script>
    <link type="text/css" rel="stylesheet" href="<%=path%>/style/blue/pageCommon.css"/>
</head>
<body>

<!-- 标题显示 --> 
<div id="Title_bar">
    <div id="Title_bar_Head">
        <div id="Title_Head"></div>
        <div id="Title"><!--页面标题-->
            <img border="0" width="13" height="13" src="<%=path%>/style/images/title_arrow.gif"/> 部门信息
        </div>
        <div id="Title_End"></div>
    </div>
</div>

<!--显示表单内容-->
<div id=MainArea>

    <s:form action="department_%{id == null ? 'add' : 'edit'}">
        <s:hidden name="id"></s:hidden>
        
        <div class="ItemBlock_Title1"><!-- 信息说明<DIV CLASS="ItemBlock_Title1">
        	<IMG BORDER="0" WIDTH="4" HEIGHT="7" SRC="${pageContext.request.contextPath}/style/blue/images/item_point.gif" /> 部门信息 </DIV>  -->
        </div>
        
        <!-- 表单内容显示 -->
        <div class="ItemBlockBorder">
            <div class="ItemBlock">
                <table cellpadding="0" cellspacing="0" class="mainForm">
                    <tr><td width="100">上级部门</td>
                        <td><select name="parentId" class="SelectStyle">
                                <option value="">请选择部门</option>
                                <option value="7">┠总经理室</option>
                                <option value="1">┠市场部</option>
                                <option value="2"> ┠咨询部</option>
                                <option value="3"> ┠招生部</option>
                                <option value="4">┠教学部</option>
                                <option value="5">┠后勤部</option>
                            </select>
                        </td>
                    </tr>
                    <tr><td>部门名称</td>
                        <td><s:textfield  name="name" cssClass="InputStyle"/> *</td>
                    </tr>
                    <tr><td>职能说明</td>
                        <td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td>
                    </tr>
                </table>
            </div>
        </div>
        
        <!-- 表单操作 -->
        <div id="InputDetailBar">
            <input type="image" src="<%=path%>/style/images/save.png"/>
            <a href="javascript:history.go(-1);"><img src="<%=path%>/style/images/goBack.png"/></a>
        </div>
    </s:form>
</div>

<div class="Description">
	说明:<br />
	1,上级部门的列表是有层次结构的(树形)。<br/>
	2,如果是修改:上级部门列表中不能显示当前修改的部门及其子孙部门。因为不能选择自已或自已的子部门作为上级部门。<br />
</div>

</body>
</html>

  

  

  

 

 

 

 

posted @ 2016-05-17 15:53  wujixing909  阅读(229)  评论(0编辑  收藏  举报