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的共同的参数和方法了. */ }