首页 > 其他 > 详细

灵活封装Struts2的action类

时间:2014-02-25 07:17:45      阅读:356      评论:0      收藏:0      [点我收藏+]
package cn.lhzd.tool;

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

/**
 *	获取子类传递的泛型对象
 *		clazz  继承者对象的:为(this.class)
 *		return 泛型数组中的对象
 */
@SuppressWarnings("rawtypes")
public class ClassTool {
	
	public static Class GenericInstantiation(Class clazz) {
		//返回clazz的父类类型。
		Type type = clazz.getGenericSuperclass();
		
		//转为Type的子类ParameterizedType类,通过它可以获取到对象    类型的泛型数组
		ParameterizedType parameter = (ParameterizedType) type;
		
		//获取对象obj<T>中的泛型对象。如<User,Order>,0索引表示第一个user
		clazz = (Class) parameter.getActualTypeArguments()[0];
		
		//返回给调用者
		return clazz;
	}

}

让action继续BaseAction类。

package cn.lhzd.web.action;

import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

import cn.lhzd.tool.ClassTool;

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

/**
 * Action工具类
 *		1:使用action继续此类,只需要传递模型对象,即可。
 *		2:拥有request,response,context
 *		3:子类调用getModel();可获取到   表单封装数据后模型对象。
 *		
 * @param <T>  模型对象
 */

@SuppressWarnings({ "unchecked", "serial","rawtypes","unused"})
public class BaseAction<T> extends ActionSupport implements ModelDriven<T>,ServletRequestAware,ServletResponseAware,ServletContextAware {
	//用于接收继承者传递的泛型对象
	private T obj;
	
	//作用域
	private ServletRequest request;
	private ServletResponse response;
	private ServletContext context;
	
	//通过子类先实例化父构造方法,创建泛型对象,做为模型驱动对象。
	public BaseAction() {
		Class clazz = ClassTool.GenericInstantiation(this.getClass());
		try {
			obj = (T) clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public T getModel() {
		return obj;
	}

	public void setServletResponse(HttpServletResponse response) {
		this.response = response;
	}

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
	}
	public void setServletContext(ServletContext context) {
		this.context = context;
	}

}


灵活封装Struts2的action类

原文:http://blog.csdn.net/hubiao_0618/article/details/19775139

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!