灵活封装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;}}
相关文章推荐
- java动态代理原理及简单模拟
- Struts JSON方式 提交数据 检查后返回检查结果
- Java 垃圾回收策略调优
- eclipse导出jar包如何正常显示图片
- MyEclipse:Resource is out of sync with the file system问题的解决办法
- java监听事件
- Java数组
- eclipse中的build和clear
- 关于java之socket输入流输出流可否放在不同的线程里进行处理
- Spring事务管理(四) 该选择编程式事务管理还是声明式事务管理
- Eclipse中修改作者变量${user}
- Java中容器的迭代器的fail-fast机制
- Java之集合类型篇
- Spring事务管理(三) 编程式事务管理
- java.lang.UnsatisfiedLinkError在web工程下的解决办法
- Spring初级:Spring应用上下文
- ThreadLocal实践
- Java中的byte
- 1.一个.java源文件中是否可以包括多个类?2...
- Java篇:Java中Final修饰符的使用