04传智_jbpm与OA项目_部门模块改进_直接在BaseAction中实现ModelDriven<T>
这个项目是用Struts2做的,我这里单独写了一个BaseAction,用来存放所有的功能模块的Action的公共部分,
刚开始的做法是这个BaseAction只会继承ActionSupport 并不会实现ModelDriven<T>,而是让每一个具体的Action(比如DepartmentAction)去继承ModelDriven<T>,
但是为了实现代码不重复写,进行了改进。这里直接让BaseAction继承ModelDriven<T>,然后让所有的功能模块的Action都继承这个BaseAction,不用再继承ModeDriven<T>了。
BaseAction的代码如下:
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
private Class classt;
private T t;
public BaseActiom() {
// 这个构造函数的设计和之前的泛型Dao扩展是一样的,BaseAction是要用来被别的Action来继承的,所以这个就可以得到BaseAction中的泛型的类类型。
try {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
this.classt = (Class) type.getActualTypeArguments()[0];
// 直接创建一个T对象,比如如果传入的是Department这里就会创建一个Department
this.t = (T) this.classt.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
public static final String LISTACTION = "listAction";
public static final String ADDUI = "addUI";
public static final String UPDATEUI = "updateUI";
public static final String ACTION2ACTION = "action2ation";
// 返回这个String 就会跳转到新的界面 用来展示所有的部门
public String listAction = LISTACTION;
// 返回这个String 就会跳转到新的界面 用来增加一个部门
public String addUI = ADDUI;
// 返回这个String 就会跳转到新的界面 用来修改一个部门
public String updateUI = UPDATEUI;
// 一个Action跳到另外一个Action
public String action2action = ACTION2ACTION;
public T getModel() {
return t;
}
}
相对应的Struts2配置文件的写法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="department" namespace="/" extends="struts-default">
<action name="DepartmentAction_*" method="{1}" class="DepartmentAction">
<result name="listAction">WEB-INF/jsp/department/listJsp.jsp</result>
<result name="action2ation" type="redirectAction">DepartmentAction_getAllDepartment.action </result>
<result name="addUI" >WEB-INF/jsp/department/add.jsp </result>
<result name="updateUI" >WEB-INF/jsp/department/update.jsp </result>
</action>
</package>
</struts>
每一个Action,比如DepartmetnAction 都是继承BaseAction ,和 implement ModeDriven<T>。ModeDrivern<T>是Action中传递参数的一中方式。
具体的DepartmentAction写法如下:
public class DepartmentAction extends BaseActiom<Department> {
/**
*
*/
//private static final long serialVersionUID = 7677215666794215686L;
//模型驱动的作用把数据放到栈顶
/**
* Struts2里面的模型驱的作用是 能够获取页面的数据
* 但是我们在保存这个新加的部门时不能直接就是add this.getMode。这样做
*/
//private Department model=new Department();
private DepartmentServer departmentServer;
//get方法
public DepartmentServer getDepartmentServer() {
return departmentServer;
}
//set方法
public void setDepartmentServer(DepartmentServer departmentServer) {
this.departmentServer = departmentServer;
}
public String getAllDepartment()
{
Collection<Department> departmentList=this.departmentServer.getAllDepartment();
//把departments放入map棧中
ActionContext.getContext().put("departmentList", departmentList);
return listAction;
}
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ModelDriven#getModel()
*/
/*public Department getModel() {
return this.model;
}*/
public String deleteDepartment()
{
this.departmentServer.deleteDepartment(this.getModel().getDid(), DeleteDemo.DEL_PRE_RELEASE);
return action2action;
}
//跳转到添加部门的界面
public String addUI()
{
return addUI;
}
//添加一个部门
public String add()
{
/**
* 我们不能直接做 this.departmentServer.saveDepartment(this.getModel());
*/
//应该这么做的
/**
* 1.先建立一个department
* 2.把模型驱动中的值赋值到department中
* 3.执行save方法保存
*
*/
Department department=new Department();
//就这么一行代码就值就过来了,对象的属性的赋值工程
BeanUtils.copyProperties(this.getModel(), department);
departmentServer.saveDepartment(department);
return action2action;
}
public String UpdateUI()
{ //数据回显,把数据放在堆栈上
Department department=this.departmentServer.getDepartment(this.getModel().getDid());
//将对象放入栈顶
ActionContext.getContext().getValueStack().getRoot().add(0, department);
return updateUI;
}
public String Update()
{ /**
1.先根据Id把Department把值从数据库取出来。
2.把修改以后的数据赋值到该对象中
3,针对该对象进行Update操作
**/
//从数据库中根据id得到数据
Department department=this.departmentServer.getDepartment(this.getModel().getDid());
//从驱动中把最新的数据得到赋值给department
BeanUtils.copyProperties(this.getModel(), department);
//进行数据库的更新操作。
departmentServer.updateDepartment(department);
//跳转回查询到的界面。
return action2action;
}
}
04传智_jbpm与OA项目_部门模块改进_直接在BaseAction中实现ModelDriven<T>的更多相关文章
- 01传智_jbpm与OA项目_整体项目架构
oA项目: 项目结构如下:
- 05传智_jbpm与OA项目_部门模块中增加部门的jsp页面增加一个在线编辑器功能
这篇文章讲的是在线编辑器功能,之前的部门模块中,增加部门的功能jsp页面起先是这么做的.
- 02传智_jbpm与OA项目_部门模块
部门模块:具有增删改查(部门)的功能. Dao层的实现: 1,定义一个DepartmentDao.java. 定义基本的数据库操作.
- 黑马传智JavaEE57期 2019最新基础+就业+在职加薪_汇总
黑马传智JavaEE57期 2019最新基础+就业+在职加薪 阶段1 语言基础+高级· 1-1-Java基础语法 第14节 数组 111
- ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)
在用户是否拥有某项权限的问题 是这样解决的: 用户登录之后 登录信息是保存在session域中的 通过el表达式可得到登录的对象信息 那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 ...
- 2013传智播客视频--.ppt,.pptx,.doc,.docx.目录
\!-- JQ03-JQ事件动画\.1版JS+JQ PPT\00JsDom编程01_邹华栋.docx; \!-- JQ03-JQ事件动画\.1版JS+JQ PPT\00JsDom编程01_邹华栋.pp ...
- 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业
在上海传智播客宋学生Java六期学员.在班级尚未毕业阶段,私自投递简历,而且逃课去面试,获得某国企的Offer.入职薪资5.7K,,兼有五险一金.饭补等齐全福利,因就业老师要求班级同学未毕业不要急于就 ...
- 揭秘传智播客班级毕业薪资超7k的内幕系列 之三 ----国企慕名而来,将未毕业学员“抢走”,传智播客又一次定义“被就业”
前面文章提及Java六期学员张同学提前就业某国企,入职薪资6.3k,各种福利齐全.作为班级首位就业同学,他的就业也成为了班级其它同学就业的风向标.但事实上张同学的就业属于"被就业" ...
- 传智播客.NET视频学习课件
传智播客.NET视频学习课件访问.NET网站了解更多课程详情http://net.itcast.cn(小提示:为什么本书中超链接打不开?)此套课件是伴随 传智播客.net实况教学视频 (小提示:为什么 ...
随机推荐
- 【读书笔记】iOS网络-保护网络传输
一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名 ...
- iOS 学习 - 10下载(1) NSURLConnection 篇
程序的实现需要借助几个对象: NSURLRequest:建立了一个请求,可以指定缓存策略.超时时间.和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSM ...
- android Gui系统之SurfaceFlinger(1)---SurfaceFlinger概论
GUI 是任何系统都很重要的一块. android GUI大体分为4大块. 1)SurfaceFlinger 2)WMS 3)View机制 4)InputMethod 这块内容非常之多,但是理解后,可 ...
- .NET文档生成工具ADB使用图文教程
.NETv3.0 可再发行组件包 类型:编程辅助大小:2.7M语言:中文 评分:1.8 标签: 立即下载 ADB2.3使用指南 ADB2.3使用方法如下图所示: (1)主界面: (2)批量选择: 4. ...
- #VSTS日志# 2015/12/10 – 终于可以删除工作项了
最近的更新不少,废话少说,直接上干货 定制工作项字段 本周的更新后,所有的用户都可以在vsts上直接给工作项添加字段了,具体内容包括– 添加新字段(日期,字符串,整形,数字)– 字段显示位置配置– 过 ...
- C# 表复制和数据行的复制说明(Clone、ImportRow 、Copy )
/// <summary> /// 构建测试数据表 /// </summary> /// <returns></returns> private Dat ...
- mysql 去重,跨表更新,跨表删除
一.去重 1.查询出重复的记录 CREATE TABLE push_log_full_2013_10_30_tmp SELECT * FROM `push_log_full` WHERE time B ...
- view组件的duplicateParentState属性
今天做页面的时候遇到一个小问题,在点击的时候改变组件的图片来源,这个很简单大家都知道,用selector可以很快实现.但是现状有点特殊,是 LinearLayout 中包裹着一个 ImageView ...
- Java 使用 JRegistry-1.8.1 读取和设置 windows 注册表
在一个监控相关的Java项目中,需要读取windows系统的注册表,搜索到使用 JRegistery 可以解决.代码如下: /** * @author digdeep@126.com */ publi ...
- MySQL用户无法登陆问题
安装完MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用普通用户(假设为tom)本地登录数据库的时候,经常会出现无法登录的情况,但是从其他的mysql客户端却可以登录.在本地使用t ...