ModelDriven利用泛型实现多个Action得到不同的getModel类

来源:互联网 发布:淘宝每时每刻沙特代购 编辑:程序博客网 时间:2024/06/04 18:56
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {Class<T> clazz;T t;public BaseAction() {super();      ParameterizedType parameterizedType =  (ParameterizedType) getClass().getGenericSuperclass();        Type[] types = parameterizedType.getActualTypeArguments();        clazz = (Class<T>) types[0];        try {  t=clazz.newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); }}@SuppressWarnings("unchecked")@Overridepublic T getModel(){  return t;}}

注意t是创建的类,而clazz是Class<T>这是不一样的,以后创建的action只要继承BaseAction

就可以使用封装好的t了

如下

public class DepartmentAction extends BaseAction<Department> {private DepartmentService departmentService;public DepartmentService getDepartmentService() {return departmentService;}@Resource(name="departmentServiceImpl")public void setDepartmentService(DepartmentService departmentService) {this.departmentService = departmentService;}public String add(){departmentService.save(t);return "toList";}}


注意不要把T 和Class<T>混淆,否则会出现save(Class<?>)不是save(T t)这样的错误