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. struts2 18拦截器详解(七)

    ChainingInterceptor 该拦截器处于defaultStack第六的位置,其主要功能是复制值栈(ValueStack)中的所有对象的所有属性到当前正在执行的Action中,如果说Valu ...

  2. 【python cookbook】【字符串与文本】2.在字符串的开头或结尾处做文本匹配

    问题:在字符串的开头或结尾处按照指定的文本模式做检查,例如检查文件的扩展名.URL协议类型等: 解决方法:使用str.startswith()和str.endswith()方法 >>> ...

  3. laravel事务小例子

    发生异常则自动回滚,正常则自动提交,示例如下: DB::connection('vshare')->transaction(function() use($id,$reason,$refuser ...

  4. Linux, Mac下Shell 数组 Array 的修理工

    我的测试基本都是在Mac,及Unix环境下测试的,如无特别注明,默认就是Mac 不论你看到这篇随笔是被shell array的奇淫巧技,还是发现shell array就在一对{}里面就可以做那么多勾当 ...

  5. Class.forName("ClassName")与ClassName.class的区别

    引发问题的来源:最近在看比较深入的JVM相关的书,不得不感慨,JVM确实是比较深奥,很多地方难以理解不说,在网上还找不到什么资料,发现一个左思右想都想不明白的问题上网来搜索,结果基本上都是从书上cop ...

  6. AVAudioplayer时error解决 创建失败 ERror creating player: Error Domain=NSOSStatusErrorDomain Code=2003334207 "(null)"

    AVAudioplayer 有两个初始化方法: 1.[[AVAudioPlayer alloc] initWithData:musicData error&e]; 2.[[AVAudioPla ...

  7. OS开发拓展篇—应用之间的跳转和数据传

    iOS开发拓展篇-应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...

  8. mongo VUE 操作

    一  修改字段名称 db.rc_配置_付款限额_消费.update({ "生效标识" : 1, "$atomic" : "true" },{ ...

  9. 在discuz二次开发模板时,diy编辑显示我“抱歉,您没有权限添加此模块

    <div id="diy_vk_portal_slide_top" class="area"><div id="frameCRxR0 ...

  10. php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...