实战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");@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步, 新增模块, 部门管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Powershell记录2
- 下一篇: 深入理解计算机系统-之-数值存储(六)-