import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 文件名 : BaseAction.java
 * 提取SSH中的action类
 * 由于SSH的action中采用模型驱动的方法,使用泛型的方式
 */
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

    /*
     * 实例化父类对象,提供model
     */
    public BaseAction() {
        // 获取子类中的泛型对象,当创建子类对象时候,会默认使用super()构造父类对象,而此时使用this关键字,指向的是子类的实例.
        Type genericSuperclass = this.getClass().getGenericSuperclass();
        ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
        Class<T> clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];
        try {
            model = clazz.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //采用模型驱动的方式
    protected T model;

    @Override
    /*
     * (提取父类的抽象类的模型代码)
     * 
     * @see com.opensymphony.xwork2.ModelDriven#getModel()
     */
    public T getModel() {
        return model;
    }
    
    /**
     * 后面就可以继续提取子类action的共同的参数和方法了.
     */
}
posted on 2017-08-12 20:07  博客王大锤  阅读(186)  评论(0编辑  收藏  举报