package com.ssh.shop.action;

import java.io.InputStream;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map; import javax.annotation.Resource; import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
//... /**
* 设置jsp中使用到的session、request、application
* 其他action继承该类,可以使用这些对象,而不用再重复地自己创建
*
* 注意:在项目启动的时候,struts过滤器会自动把相应的内置对象,
* 和内置对象对应的sessionMap、requestMap、applicateMap,
* 存储到ActionContext和值栈中,
* 实现的拦截器为servletConfig(org.apache.struts2.interceptor.ServletConfigInterceptor)
*
* Struts执行流程:创建action ---> 调用拦截器 ---> 拦截器访问成功后调用action的方法
*
* ServletConfigInterceptor源代码中有下面代码:(判断实现什么接口,就注入什么对象)
* if (action instanceof ApplicationAware) //如果action实现了ApplicationAware接口
((ApplicationAware) action).setApplication(context.getApplication());
if (action instanceof SessionAware)
((SessionAware) action).setSession(context.getSession());
if (action instanceof RequestAware)
((RequestAware) action).setRequest((Map) context.get("request"));
*
* 加入的ModelDriven泛型的使用方法
* @author Administrator
*
*/
@SuppressWarnings("unchecked")
@Controller
@Scope("prototype")
public class BaseAction<T> extends ActionSupport implements SessionAware,RequestAware,ApplicationAware,ModelDriven<T>{ //批量删除的记录的id数组
protected String ids; protected T model; protected Map<String, Object> session;
protected Map<String, Object> request;
protected Map<String, Object> applicate; /**
* 存储数据给前台,可以为记录count和总记录数,用来分页
*/
protected Map<String, Object> pageMap = null;
/**
* 流形式数据
*/
protected InputStream inputStream; /**
* Json格式数据
*/
List<T> jsonList = null; @Resource //spring属性注入
protected CategoryService categoryService;
@Resource
protected AccountService accountService;
@Resource
protected ProductService productService;
@Resource
protected UploadUtil uploadUtil; //用户文件上传(使用方法见product/save.jsp中图片上传)
protected FileUpload fileUpload; /**
* 很重要
* 获取T的具体类型
* 实现ModelDriven接口,必须要写此方法:获取实例
*/
@Override
public T getModel() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
Class clazz = (Class) type.getActualTypeArguments()[0];
try {
model = (T) clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// System.out.println("model:"+model);
return model;
} @Override
public void setApplication(Map<String, Object> applicate) {
this.applicate = applicate;
} @Override
public void setRequest(Map<String, Object> request) {
this.request = request;
} @Override
public void setSession(Map<String, Object> session) {
this.session = session;
} public Map<String, Object> getPageMap() {
return pageMap;
} /**
* 只写get方法,用于将获取的数据传输给前台
* @return
*/
public InputStream getInputStream() {
return inputStream;
}
/**
* 只写get方法,用于将获取的数据传输给前台
* @return
*/
public List<T> getJsonList() {
return jsonList;
} public FileUpload getFileUpload() {
return fileUpload;
} public void setFileUpload(FileUpload fileUpload) {
this.fileUpload = fileUpload;
} }

Struts BaseAction工具类,封装Session,Request,Application,ModelDriven的更多相关文章

  1. (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)

    目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选      程序员8月书讯      项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...

  2. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  3. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  4. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  5. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  6. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战

    笔记 4.Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download ...

  7. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  8. 关于TornadoFx和Android的全局配置工具类封装实现及思路解析

    原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...

  9. Android常见工具类封装

    MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...

随机推荐

  1. Java ActiveMQ 讲解(一)理解JMS 和 ActiveMQ基本使用(转)

    转自:http://www.cnblogs.com/luochengqiuse/p/4678020.html?utm_source=tuicool&utm_medium=referral 最近 ...

  2. linux设备驱动归纳总结(六):3.中断的上半部和下半部——tasklet【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-100005.html linux设备驱动归纳总结(六):3.中断的上半部和下半部——tasklet x ...

  3. svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码

    svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码 获取锁的时候可以看下 是谁锁住了,让对方提交解锁,如果是给离职人员锁住需要使用偷锁的方式先解锁再提交偷锁处理办法:选中该文 ...

  4. [转]vs2008安装失败的总结与分享

    转自:http://www.cnblogs.com/rockdean/archive/2010/01/13/1646851.html 今天系统是刚装的,今儿个也不是第一次装系统,也不是第一次装vs20 ...

  5. Tutorial: WPF User Control for AX2012

    原作者: https://community.dynamics.com/ax/b/goshoom/archive/2011/10/06/tutorial-wpf-user-control-for-ax ...

  6. dirname和basename命令

    dirname返回文件所在目录路径,而basename则相反,去掉路径返回最后的文件名. dirname指令 1.功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目 ...

  7. js词法作用域规则

    function foo() {console.log( a ); // 2不是3} function bar() {var a = 3;foo();} var a = 2;bar(); js中的作用 ...

  8. 周赛-Expression 分类: 比赛 2015-08-02 09:35 3人阅读 评论(0) 收藏

    A. Expression time limit per test1 second memory limit per test256 megabytes inputstandard input out ...

  9. 山东理工大学第七届ACM校赛-字符的变化 分类: 比赛 2015-06-26 10:32 46人阅读 评论(0) 收藏

    字符的变化 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 一个长度为n(1<=n<=1000)的字符串(只包含小写字 ...

  10. combox绑定后添加自定义列

    DataTable dt = shUBll.FindAllByWhere(""); DataRow dr = dt.NewRow(); dr["SUID"] = ...