ModelDriven & Preparable 接口

Posted 世间草木

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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--ModelDriven接收参数

PHP Prepara un string en PHP para ingresarlo en codigo Javascript

PHP Prepara un string en PHP para ingresarlo como atributo en un XML

Struts2中的ModelDriven机制及其运用[转]

Struts2中的ModelDriven机制及其运用

Struts2实现ModelDriven进行属性驱动