实战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--设计管理模块,整合!!!相关推荐
- ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)
ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万) 课程讲师:Tiger 课程分类:.net 适合人群:高级 课时数量: ...
- Java微服务——SpringCloud实战篇2:整合Gateway、Config、Bus
Java微服务--SpringCloud实战篇2:整合Gateway.Config.Bus 如果小伙伴在阅读下列内容时,对于编写SpringCloud项目是零基础,那么请先阅读小编的另一篇博文:&qu ...
- Elasticsearch实战篇——Spring Boot整合ElasticSearch
2019独角兽企业重金招聘Python工程师标准>>> 当前Spring Boot很是流行,包括我自己,也是在用Spring Boot集成其他框架进行项目开发,所以这一节,我们一起来 ...
- ElasticSearch实战篇 - Spring Boot 整合 ElasticSearch
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:冯文议 链接:segmentfault.com/a/1190000018625101 当前Spring Boot很是流行,包括我自己, ...
- SpringSecurity权限管理系统实战—六、SpringSecurity整合JWT
文章目录 系列目录 前言 一.无状态登录 二.JWT介绍 1.什么是jwt 头部(Header) 载荷(Payload) 签名(Signature) 2.JWT工作流程 3.简单实现 三.整合JWT ...
- SpringBoot 2.7.2 分模块整合 activiti 7.1.0.M6
SpringBoot 2.7.2 分模块整合 activiti 7.1.0.M6 项目背景 项目架构 process-dao process-service process 版本一览 process- ...
- ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统)
课程学习地址:http://***/goods.php?id=180 课程说明: 国内首部完整讲述ERP系统架构.业务逻辑.开发的项目实战课程.考虑到本系统的庞大及复杂性.本课程购买学员每人赠送一个U ...
- ASP.NET典型三层架构企业级医药行业ERP系统实战(8大模块22个子系统,价值3000万)...
课程讲师:Tiger 课程分类:.net 适合人群:高级 课时数量:192课时 更新程度:完毕 我这里有一套课程和大家分享,我的qq是205905533 ...
- echarts前后端交互数据_SpringBoot2.0实战(26)整合SpringSecurity前后端分离JSON交互...
在前端的文章中,我们实现了使用 SpringSecurity 实现登录鉴权,并使用数据库存储用户信息,实现登录鉴权 SpringBoot2.0实战(24)整合SpringSecurity之最简登录方法 ...
最新文章
- 怎么让wordpress用sqlite3 搭建轻量级博客系统
- 图标和文字对齐的方法
- “极致”神话和产品观念_转自“蜗窝科技”
- RIPPER算法原理
- php mysql_query的的用法_PHPmysqli_query()函数定义与用法
- 服务器物理部署拓扑图,【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(五)-物理服务器路由方案及配置...
- 360浏览器兼容问题
- 死锁Demo、线程通信Demo
- Linux内核管理之分配掩码(三)
- 安川机器人编程加电弧_安川焊接机器人编程
- 静态库.a和动态库.so的制作
- linux系统中配置NFS实现文件共享
- 【2022年更新】手把手教你去除 WinRAR 的弹窗广告
- ios12越狱自签需要联网_从越狱的iOS切换到Android? 这是你需要知道的
- 1946年2月14号第一台计算机,1946年2月14日 世界上第一台计算机诞生,世界,您好!...
- js报错“TypeError: ‘stepUp‘ called on an object that does not implement interface HTMLInputElement”
- GPS导航仪的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- win 7 系统(x64)安装vs2012时遇到的问题
- loadrunner破解以及超级license
- SM4加密算法原理以及C语言实现
热门文章
- protobuf message定义_ProtoBuf 协议设计与开发
- @value 静态变量_Spring注解驱动开发之八——@Value属性赋值、@PropertySource 加载外部配置文件...
- python xlsxwriter 画图_Python XlsxWriter模块Chart类用法实例分析
- 【百家稷学】从传统方法到深度学习,人脸算法和应用的演变(河南平顶山学院技术分享)...
- 【杂谈】深度学习之模型设计书看完了完全不过瘾?那这些拓展资料你都看了不?...
- 【百战GAN】二次元宅们,给自己做一个专属动漫头像可好!
- python循环输出00-59
- 农贸自由化对话国际农民丰收节贸易会:东北粮食贸易对策
- Android基础(三) UI开发 Part 1
- P2698 [USACO12MAR]花盆Flowerpot