一... 设计实体类/表

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");@Testpublic 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>{@Resourceprivate 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 stubreturn 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{@Resourceprivate 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}" οnclick="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>

  

  

  

 

转载于:https://www.cnblogs.com/wujixing/p/5501960.html

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

  1. 软件测试项目实战案例分解,跟着我一步一步操作【人力资源管理系统】

    目录 一.引言 二.项目概述 三.平台.角色和权限 四.人资管理员 五.最后 一.引言 1.编写目的 本文档将列举实现人力资源管理系统(以下简称HR系统)所需要的全部功能,并对每个功能给出简单的描述. ...

  2. 实战:搭建高效率生鲜B2B平台八大模块及技术要求

    很开心在这里和大家交流,我们是一群生鲜B2B的创业者,在生鲜领域创业三年多:我们也是一群工程师,致力于通过互联网产品和技术让我们的农业更轻松更健康,我们是来自宋小菜的产品技术团队,我们想和大家一起聊聊 ...

  3. 小特工具箱新增模块:电商类API、SDK和ERP

    经过最近一段时间的开发,小特工具箱新增电商类API,包括采集主流电商平台的商品详情.销售详情和评论详情,做电商的公司可以使用这些API. 博客搬家啦,新地址: https://www.navisoft ...

  4. ​S/4中究竟有多少个模块,你对这些模块了解多少

    SAP ERP是一个高度模块化的企业管理软件,它通过多模块的组合以及高度配置化的系统架构来实现一个产品满足几乎所有行业的需要,这些行业包罗万象,既包括制造业(离散行业.流程行业),也包括非制造业(零售 ...

  5. python怎么导入包-python模块之导入包及模块发布

    1.导入包(不常用的方法) 在使用python的包时,有时候想直接导入包名,然后通过包名来调用模块,例如: temp为我们创建的一个包,如果我们想通过下面的方式进行导入模块中的方法,将会出错 impo ...

  6. Python学习-基础篇4 模块与包与常用模块

    一 模块介绍 1.什么是模块?#常见的场景:一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用.#在python中,模块的使用方 ...

  7. Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  8. python中模块的概念_Python中模块的概念

    """ 模块搜索顺序 sys.path 查看搜索顺序 """ """ 编程语言中,库.包.模块是同一种概念,是 ...

  9. community 计算模块度_光模块深度:国内光模块企业快速崛起

    一.核心观点 二.发展追溯:技术是底蕴.创新是动力 1 光通信发展:技术迭代加快,国产替代是前进的方向 依据摩尔定律,光模块的小型化.低成本以及高速率是产品迭代的主要方向. 2 竞争格局:市场集中度高 ...

最新文章

  1. 浏览器会缓存js文件
  2. 那些对数据实时性要求高的APP后端是怎么做的
  3. linux 查看目录挂载的ip,Linux挂载IPSAN和FCSAN操作,Linux挂载NFS文件系统
  4. Lua脚本式编程示例
  5. 谷歌浏览器首页被改hao123_百度浏览器停更?今日头条、微博谁将获利?
  6. 程序员过关斩将--快速迁移10亿级数据
  7. python拟合曲线的方式,Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】...
  8. 【Transformer】TransGAN的鉴别器的理解
  9. c语言的跳线帽,电脑主板上跳线帽有什么作用图文介绍
  10. MySQL一个语句查出各种整形占用字节数及最大最小值
  11. 数据库学习----MySQL(二)
  12. mysql慢查询日志配置_MySQL 慢查询日志配置与简析
  13. vld(Visual Leak Detector)下载地址和源码地址
  14. 安全HCIP之eSight
  15. ThreadLocal 源码之 expungeStaleEntry
  16. Docker部署homeassitant
  17. OV426+OVM6946基于FPGA调试成像
  18. springboot 自定义starter类
  19. tiny4412开发板Android篇_3基于tiny4412的Android系统的烧写(SD卡烧写到emmc)
  20. Centos7 安装部署apache。简单易上手

热门文章

  1. 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
  2. FastDFS FAQ (欢迎反馈,我将及时整理)
  3. 使用Core Animation对象来实现动画
  4. 前端工程师需要掌握的技能
  5. 20135331 文艺 java实验
  6. How do I cover the “no results” text in UISearchDisplayController's searchResultTableView?
  7. port常用和不常用端口一览表
  8. 黑客攻击我们的11步详解及防御建议
  9. android:windowSoftInputMode属性
  10. 动态查看JVM内存的工具