Struts BaseAction工具类,封装Session,Request,Application,ModelDriven
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的更多相关文章
- (转载) 百度地图工具类封装(包括定位,附近、城市、范围poi检索,反地理编码)
目录视图 摘要视图 订阅 赠书 | 异步2周年,技术图书免费选 程序员8月书讯 项目管理+代码托管+文档协作,开发更流畅 百度地图工具类封装(包括定位,附近.城市.范围poi检索, ...
- Redis操作Set工具类封装,Java Redis Set命令封装
Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...
- Redis操作List工具类封装,Java Redis List命令封装
Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...
- Redis操作Hash工具类封装,Redis工具类封装
Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...
- Redis操作字符串工具类封装,Redis工具类封装
Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战
笔记 4.Redis工具类封装讲解和实战 简介:高效开发方式 Redis工具类封装讲解和实战 1.常用客户端 https://redisdesktop.com/download ...
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- 关于TornadoFx和Android的全局配置工具类封装实现及思路解析
原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...
- Android常见工具类封装
MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...
随机推荐
- win32 treeview
// 1.create treeview DWORD dwStryle = WS_VISIBLE | WS_CHILD | TVS_HASLINES|TVS_SHOWSELALWAYS/*|TVS_L ...
- [转]如何:在设备上安装 SQL Server Compact 3.5
将设备连接到计算机,或者将仿真程序插入底座. 有关更多信息,请参见如何:将设备仿真程序插入底座和移除底座. 说明: 计算机上必须已安装了 Windows Mobile Device Center 或 ...
- 30、springmvc
第一章回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 第二章回顾struts ...
- HDU 1014:Uniform Generator
Uniform Generator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- API判断网站IP地址,国家区域
直接访问http://api.wipmania.com/jsonp 还有经纬度
- Android listview下拉刷新 SwipeRefreshLayout
今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...
- 多校赛3- Painter 分类: 比赛 2015-07-29 19:58 3人阅读 评论(0) 收藏
D - Painter Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status P ...
- 山东理工大学第七届ACM校赛-飞花的线代 分类: 比赛 2015-06-26 10:29 10人阅读 评论(0) 收藏
飞花的线代 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 飞花壕的线代一直非常的壕(好),线代考试每次都是全班第一.一次,飞花壕在预习 ...
- python两个dataframe的合并
见http://pandas.pydata.org/pandas-docs/stable/merging.html
- phpcms 02
头部和尾部包含 1 默认的首页模板 C:\wamp\www\phpcms\templates\ypzy2014\content\index.html 打开模板查看 第一句 {template &quo ...