您的位置:首页 > 编程语言 > Java开发

灵活封装Struts2的action类

2014-02-23 22:56 330 查看
<pre code_snippet_id="201258" snippet_file_name="blog_20140223_1_4157116" name="code" class="java">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;
}

}
 
</pre><strong>让action继续BaseAction类。</strong><pre>
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;//采用protected 修饰,子类可以直接调用。protected ServletRequest request;protected ServletResponse response;protected 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;}}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: