实战3--设计管理模块,整合!!!
1. 所有dao和daoimpl模塊都不用, 加上?@Deprecated
2. 建立DaoSupport類和DaoSupportImpl類
? ??DaoSupport.java? ? ?
package cn.itcast.oa.base; import java.util.List; public interface DaoSupport<T> {void save(T entity);void delete(Long id);void update(T entity);T getById(Long id);List<T> getByIds(Long[] ids);List<T> findAll(); }? DaoSupportImpl.java? ? ?
package cn.itcast.oa.base; import java.lang.reflect.ParameterizedType; import java.util.List; import javax.annotation.Resource; import org.hibernate.Session; import org.hibernate.SessionFactory;@SuppressWarnings("unchecked") public class DaoSupportImpl<T> implements DaoSupport<T> {@Resourceprivate SessionFactory sessionFactory;private Class<T> clazz = null;public DaoSupportImpl(){//使用反射技術得到T的真實類型ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//獲取當前new的對象的泛型的父類類型this.clazz = (Class<T>)pt.getActualTypeArguments()[0];System.out.println("clazz===>"+clazz.getName());System.out.println("clazz===>"+clazz.getSimpleName());}protected Session getSession() {return sessionFactory.getCurrentSession();}public void save(T entity) {getSession().save(entity);}public void update(T entity) {getSession().update(entity);}public void delete(Long id) {Object obj = getById(id);if (obj != null) {getSession().delete(obj);}}public T getById(Long id) {if(id == null)return null;elsereturn (T) getSession().get(clazz, id);}public List<T> getByIds(Long[] ids) {return getSession().createQuery(//"FROM " + clazz.getSimpleName()+"WHERE id IN(:ids)")//.setParameterList("ids",ids).list();}public List<T> findAll() {return getSession().createQuery(//"FROM " + clazz.getSimpleName()).//list();}}
3. 抽取BaseAction, 這樣每個action都可以專注寫自己的方法? ?
package cn.itcast.oa.base; import java.lang.reflect.ParameterizedType; import javax.annotation.Resource; import cn.itcast.oa.service.DepartmentService; import cn.itcast.oa.service.RoleService; import cn.itcast.oa.service.UserService; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{ protected T model ; public BaseAction(){ try {//通過反射活的model的真實類型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();Class<T> clazz = (Class<T>)pt.getActualTypeArguments()[0];//通過反射創建model的實例model = clazz.newInstance();} catch (Exception e) {throw new RuntimeException();} }public T getModel() { return model;}//******************service實例的聲明******************@Resourceprotected RoleService roleService;@Resourceprotected DepartmentService departmentService;@Resourceprotected UserService userService; }整合完畢!!!
?
增加新模塊的步驟:
一. 創建Action的準備
1. 寫新的action, UserAction.java,
? ? 1) extends BaseAction
? ? 2) @Controller ?@Scope("prototype")
2. 定義出Action的方法, 寫出方法名, 作用, 返回值? ??
/** 列表 */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";}/** 初始化密碼1234 **/public String initPassword() throws Exception {return "toList";}3. 創建所用到的jsp頁面(list.jsp, saveUI.jsp)
4.?struts.xml配置? ??
<!-- 用戶管理 --> <action name="user_*" class="userAction" method="{1}"><result name="list">/WEB-INF/jsp/userAction/list.jsp</result><result name="saveUI">/WEB-INF/jsp/userAction/saveUI.jsp</result><result name="toList" type="redirectAction">user_list?parentId=${parentId}</result> </action>
二. 準備service
1. 創建接口UserService.java, ???extends DaoSupport<User>? ?
package cn.itcast.oa.service; import cn.itcast.oa.base.DaoSupport; import cn.itcast.oa.domain.User; public interface UserService extends DaoSupport<User>{ }2. 創建實現類?UserServiceImpl.java ?, ?extends DaoSupportImpl<User> implements UserService
3. 配置: 在UserServiceImpl上寫注解?@Service ?@Transactional
package cn.itcast.oa.service.impl;import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;import cn.itcast.oa.base.DaoSupportImpl; import cn.itcast.oa.domain.User; import cn.itcast.oa.service.UserService;@Service @Transactional public class UserServiceImpl extends DaoSupportImpl<User> implements UserService{}4. BaseAction里寫service的聲明? ?
package cn.itcast.oa.base; import java.lang.reflect.ParameterizedType; import javax.annotation.Resource; import cn.itcast.oa.service.DepartmentService; import cn.itcast.oa.service.RoleService; import cn.itcast.oa.service.UserService; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven;public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{ protected T model ; public BaseAction(){ try {//通過反射活的model的真實類型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();Class<T> clazz = (Class<T>)pt.getActualTypeArguments()[0];//通過反射創建model的實例model = clazz.newInstance();} catch (Exception e) {throw new RuntimeException();} }public T getModel() { return model;}//******************service實例的聲明******************@Resourceprotected RoleService roleService;@Resourceprotected DepartmentService departmentService;@Resourceprotected UserService userService; }
三. 填空
1. 寫Action方法
? ?UserAction.java
? ?
package cn.itcast.oa.view.action;import java.util.HashSet; import java.util.List;import org.apache.commons.codec.digest.DigestUtils; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller;import cn.itcast.oa.base.BaseAction; import cn.itcast.oa.domain.Department; import cn.itcast.oa.domain.Role; import cn.itcast.oa.domain.User; import cn.itcast.oa.util.DepartmentUtils;import com.opensymphony.xwork2.ActionContext;@Controller @Scope("prototype") public class UserAction extends BaseAction<User> {private Long departmentId;private Long[] roleIds;/** 列表 */public String list() throws Exception {List<User> userList = userService.findAll();ActionContext.getContext().put("userList", userList);return "list";}/** 刪除 */public String delete() throws Exception {userService.delete(model.getId());return "toList";}/** 添加頁面 */public String addUI() throws Exception {// 準備數據departmentListList<Department> topList = departmentService.findTopList();List<Department> departmentList = DepartmentUtils.getAllDepartments(topList);ActionContext.getContext().put("departmentList", departmentList);// 準備崗位List<Role> roleList = roleService.findAll();ActionContext.getContext().put("roleList", roleList);return "saveUI";}/** 添加 */public String add() throws Exception {// 封裝到對象中 (model是實體類型時, 可以使用model, 但要設置未封裝的屬性)model.setDepartment(departmentService.getById(departmentId));List<Role> roleList = roleService.getByIds(roleIds);model.setRoles(new HashSet<Role>(roleList));// 設置密碼為1234, 要使用MD5摘要()String md5Digest = DigestUtils.md5Hex("1234");model.setPassword(md5Digest);// 保存到數據庫userService.save(model);return "toList";}/** 修改頁面 */public String editUI() throws Exception {// 準備數據departmentListList<Department> topList = departmentService.findTopList();List<Department> departmentList = DepartmentUtils.getAllDepartments(topList);ActionContext.getContext().put("departmentList", departmentList);// 準備崗位List<Role> roleList = roleService.findAll();ActionContext.getContext().put("roleList", roleList);// 準備回顯的數據User user = userService.getById(model.getId());ActionContext.getContext().getValueStack().push(user);if (user.getDepartment() != null) {departmentId = user.getDepartment().getId();}if (user.getRoles() != null) {roleIds = new Long[user.getRoles().size()];int index = 0;for (Role role : user.getRoles()) {roleIds[index++] = role.getId();}}return "saveUI";}/** 修改 */public String edit() throws Exception {// 從數據庫中取出原對象User user = userService.getById(model.getId());// 設置要修改的屬性user.setLoginName(model.getLoginName());user.setName(model.getName());user.setGender(model.getGender());user.setPhoneNumber(model.getPhoneNumber());user.setEmail(model.getEmail());user.setDescription(model.getDescription());user.setDepartment(departmentService.getById(departmentId));List<Role> roleList = roleService.getByIds(roleIds);user.setRoles(new HashSet<Role>(roleList));// 更新到數據庫userService.update(user);return "toList";}/** 初始化密碼1234 **/public String initPassword() throws Exception {// 從數據庫中取出原對象User user = userService.getById(model.getId());// 設置要修改的屬性String md5Digest = DigestUtils.md5Hex("1234");user.setPassword(md5Digest);// 更新到數據庫,使用MD5摘要userService.update(user);return "toList";}public Long getDepartmentId() {return departmentId;}public void setDepartmentId(Long departmentId) {this.departmentId = departmentId;}public Long[] getRoleIds() {return roleIds;}public void setRoleIds(Long[] roleIds) {this.roleIds = roleIds;} }
2. 新增service方法
3. 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="${pageContext.request.contextPath}/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="100">登錄名</td><td width="100">姓名</td><td width="100">所屬部門</td><td width="200">崗位</td><td>備注</td><td>相關操作</td></tr></thead><!--顯示數據列表--><tbody id="TableData" class="dataContainer" datakey="userList"><s:iterator value="#userList"><tr class="TableDetail1 template"><td>${loginName}?</td><td>${name}?</td><td>${department.name}?</td><td><s:iterator value="roles">${name}</s:iterator></td><td>${description}?</td><td><s:a action="user_delete?id=%{id}" οnclick="return delConfirm()">刪除</s:a><s:a action="user_editUI?id=%{id}">修改</s:a><s:a action="user_initPassword?id=%{id}" οnclick="return window.confirm('您確定要初始化密碼為1234嗎?')">初始化密碼</s:a></td></tr></s:iterator> </tbody></table><!-- 其他功能超鏈接 --><div id="TableTail"><div id="TableTail_inside"><s:a action="user_addUI"><img src="${pageContext.request.contextPath}/style/images/createNew.png" /></s:a></div></div> </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"/><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><s:form action="user_%{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="<%=path%>/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><s:select name="departmentId" cssClass="SelectStyle"list="#departmentList" listKey="id" listValue="name"headerKey="" headerValue="==請選擇部門=="/></td></tr><tr><td>登錄名</td><td><s:textfield name="loginName" cssClass="InputStyle"/> *(登錄名要唯一)</td></tr><tr><td>姓名</td><td><s:textfield name="name" cssClass="InputStyle"/> *</td></tr><tr><td>性別</td><td><%--<s:radio name="gender" list="%{ #{'男':'男', '女':'女'} }"></s:radio><s:radio name="gender" list="#{'男':'男', '女':'女'}"></s:radio>--%><s:radio name="gender" list="{'男', '女'}"></s:radio></td></tr><tr><td>聯系電話</td><td><s:textfield name="phoneNumber" cssClass="InputStyle"/></td></tr><tr><td>E-mail</td><td><s:textfield name="email" cssClass="InputStyle"/></td></tr><tr><td>備注</td><td><s:textarea name="description" cssClass="TextareaStyle"></s:textarea></td></tr></table></div></div><div class="ItemBlock_Title1"><!-- 信息說明 --><div class="ItemBlock_Title1"><img border="0" width="4" height="7" src="<%=path%>/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><s:select name="roleIds" cssClass="SelectStyle"multiple="true" size="10" list="#roleList" listKey="id" listValue="name"/>按住Ctrl鍵可以多選或取消選擇</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,新建用戶后,密碼被初始化為"1234"。<br />3,密碼在數據庫中存儲的是MD5摘要(不是存儲明文密碼)。<br />4,用戶登錄系統后可以使用“個人設置→修改密碼”功能修改密碼。<br />5,新建用戶后,會自動指定默認的頭像。用戶可以使用“個人設置→個人信息”功能修改自已的頭像<br />6,修改用戶信息時,登錄名不可修改。 </div></body> </html>
轉載于:https://www.cnblogs.com/wujixing/p/5511045.html
總結
以上是生活随笔為你收集整理的实战3--设计管理模块,整合!!!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jmeter(4)Http Cookie
- 下一篇: JQuery 常用积累(六)ZTree