ModelDriven & Preparable 接口
一、 Preparable接口
1.有prepare()方法,实现该接口的action在执行时,首先执行该方法,用于进行一些预处理。
2.创建prepareXXX方法,则在执行XXX方法前,将先执行prepareXXX方法.
二、ModelDriven接口
1.该接口实现将T类中的属性展现到action中,action中不再需要针对T类,写set,get方法
2.注意preparable与modeldriven执行顺序,必须保证getmodel在prepare之前调用。
实现了ModelDriven就必须实现getModel这个方法,该方法返回的是你的ModelDrivern泛型中设定的实体类(就是父类抽出来的公共方法中的泛型)。
其实是为了实现代码的重用,不要再定义一次你在数据访问层定义的属性了,直接用那个类就行了。
三、执行顺序:
prepare->prepareInput->input->getModel.
参照下面例子:
假设请求为:http://127.0.0.1:8080/employee_input.action
且我们的类结构如下:
BaseAction.java
public class BaseAction extends ActionSupport { }
CRUDAction.java
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable; public abstract class CRUDAction<T> extends BaseAction implements ModelDriven<T>, Preparable {
// 具体的CRUD方法抽取
CRUD Method; // 保证执行input方法时执行下面规定的prepareInput():因为方法名对应二次参数绑定拦截器
public abstract void prepareInput() throws Exception; @Override
public void prepare() throws Exception {
// 留空
} }
具体实现EmployeeAction.java
public class EmployeeAction extends CRUDAction<Employee> {
// 具体的实现CRUD , 如excute(){};save(){};delete(){};等等
CRUD Method; public String input() {} @Override
public void prepareInput() throws Exception {
// 省略其他设置// 设置查询,回显数据,在更新方法中中解决属性丢失问题} @Override
/** 驱动模型 */
public Employee getModel() {
return employee;
}
//省略其他设置
}
顺序:
1 . CRUDaction-------prepare()
2 . EmployeeAction---prepareInput()
3 . EmployeeAction---input()
4 . EmployeeAction---getModel()
ModelDriven & Preparable 接口的更多相关文章
- Struts2实现Preparable接口和【struts2】继承ActionSupport类
Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...
- struts2 中 Preparable 接口实现数据准备
今天才知道struts还有Preparable接口,实现此接口需要实现其prepare()方法,调用action中其他方法之前会先调用prepare()方法.此接口和方法可以用于初始化一些数据. 测试 ...
- Struts2之ModelDriven和Preparable拦截器
首先struts.xml文件配置如下 默认拦截器设置为paramsPrepareParamsStack <package name="default" namespace=& ...
- (转)实现这两个接口ModelDriven<T>,Preparable有什么用?
转:http://www.cnblogs.com/guanghuiqq/archive/2012/08/24/2654300.html 实现了ModelDriven就必须实现getModel这个方法, ...
- 6. ModelDriven拦截器、Preparable 拦截器
1. 问题 Struts2 的 Action 我们将它定义为一个控制器,但是由于在 Action 中也可以来编写一些业务逻辑,也有人会在 Action 输入业务逻辑层. 但是在企业开发中,我们一般会将 ...
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1
- ModelDriven 和 Preparable 拦截器
Params 拦截器 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueSta ...
- Struts2 - ModelDriven 拦截器、Preparable 拦截器
开篇:拦截器在Struts中的作用 在我们的web.xml中,我们配置了一个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类.一旦接受到任意action的请求,该 ...
- 接触Struts2的ModelDriven<>接口
最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录 ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象 参考他人 ...
随机推荐
- 阿里云centos安装docker-engine实践
近日在阿里云ECS服务器(centos系统)中安装docker,参考官方指南 https://docs.docker.com/engine/installation/linux/centos/ 大概 ...
- texlive测试是否安装成功
在完成TEX Live安装之后,自然你会希望试试看它是否正常工作,好让你在以后能够创建优美的文档和字体. 1.首先确认你可以执行tex程序: >tex --version TeX 3.14159 ...
- lua -- 所有UI组件的基类
-- 组件行为基础 local Behavior = class("Behavior"); function Behavior:ctor(name) self.owner = ni ...
- LeetCode: Find Peak Element 解题报告
Find Peak Element A peak element is an element that is greater than its neighbors. Given an input ar ...
- iOS开发微信支付
现在基本所有的App都会接入支付宝支付以及微信支付,也有很多第三方提供给你 SDK帮你接入,但是这种涉及到支付的东西还是自己服务器搞来的好一些,其实搞懂了 逻辑非常的简单,下面直接给大家说说下基本流程 ...
- [INS-20802] Oracle Net Configuration Assistant failed
[INS-20802] Oracle Net Configuration Assistant failed.在安装Oracle 11g R2时出现了该错误提示.以前安装的时候没有碰到过类似的错误.原来 ...
- Serializable接口
Serializable这个接口起啥作用呢?? 这个接口没有提供任何方法,我们实现它有什么意义呢? Serializable接口是启用其序列化功能的接口.Serializable接口中没有任何方法,一 ...
- js 规范
1.原型链的弊端是不支持多重继承.记住,原型链会用另一类型的对象重写类的 prototype 属性 2.注意:调用 ClassA 的构造函数,没有给它传递参数.这在原型链中是标准做法.要确保构造函数没 ...
- java.lang.NoSuchFieldError: No static field abc_ic_ab_back_mtrl_am_alpha of type I in class Landroid/support/v7/appcompat/R$drawable
出现java.lang.NoSuchFieldError: No static field abc_ic_ab_back_mtrl_am_alpha of type I in class Landro ...
- 这才是真正的裸眼3D!超级震撼!!
大家有没认为有意思啦,反正俺是被震撼到了. 好奇异-- ! " src="http://www.yixieshi.com/uploads/allimg/141116/1446431 ...