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的共同的参数和方法了.*/ }
转载于:https://www.cnblogs.com/wangxinblog/p/7351339.html