package com.cabletech.common.base;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.baseinfo.excel.ExportUtil;
import com.cabletech.common.util.Page;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
/**
* struts2 Action基类,所有的业务的action必须继续base包下的action
*
* @param <T>
* T
* @param <PK>
* PK
* @author 赵璧
* @author 杨隽 2012-02-10 添加initResponse()方法
* @author 杨隽 2012-05-15 提取setExcelParameter()方法并放入基类
*
*/
public abstract class BaseAction<T, PK extends Serializable> extends
ActionSupport implements ModelDriven<T>, Preparable,
ServletRequestAware, ServletResponseAware, SessionAware {
public static String CONTENT_TYPE = "application/vnd.ms-excel";
public Logger logger = Logger.getLogger(this.getClass());
/**
*
*/
private static final long serialVersionUID = 1L;
// 载入list页面
public static final String LIST = "list";
public static final String VIEW = "view";
public static final String RELOAD = "reload";
// 默认每页显示条数 添加: 汪杰 2011-12-31
public static final int DEFAULT_PAGE_SIZE = 15;
private String pageNo; // 当前页码
private HttpServletResponse response;
private HttpServletRequest request;
private ServletContext context;
@SuppressWarnings("rawtypes")
public Map sessionManager;
// 处理日期JSON类型格式
private String datafomat = "yyyy-MM-dd HH:mm:ss";
/**
* 获取参数
*
* @param name
* String
* @return String
*/
public String getParameter(String name) {
return request.getParameter(name);
}
public HttpServletResponse getResponse() {
return response;
}
public HttpServletRequest getRequest() {
return request;
}
public ServletContext getContext() {
return context;
}
/**
* 获取当前登录用户信息
*
* @return
*/
public UserInfo getUser() {
return (UserInfo) sessionManager.get(SysConstant.SESSION_USERINFO_KEY);
}
/**
* Action函数,显示新增或修改Entity界面。建议return INPUT
*/
@Override
public String input() throws Exception {
return INPUT;
}
/**
* Action函数,显示Entity详细信息界面,建议return VIEW
*/
public String view() throws Exception {
return VIEW;
}
/**
* 在input()前执行二次绑定
*/
public void prepareInput() throws Exception {
prepareViewModel();
}
/**
* 在view()前执行二次绑定
*/
public void prepareView() throws Exception {
prepareViewModel();
}
/**
* 在view()前执行二次绑定
*/
public void prepareSave() throws Exception {
prepareSaveModel();
}
/**
* 等同于prepare()的内部函数,供prepardView()函数调用
*/
protected abstract void prepareViewModel() throws Exception;
/**
* 等同于prepare()的内部函数,供prepardSave()函数调用
*/
protected abstract void prepareSaveModel() throws Exception;
/**
* prepare
*/
public void prepare() throws Exception {
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
/**
* 页面跳转
*
* @param info
* 提示信息
* @param url
* 跳转url
* @param errorLevel
* 错误级别
* @param values
* 暂时没用
*/
public void addMessage(String info, String url, String errorLevel,
Object... values) {
if (!"".equals(url)) {
if (url.indexOf("-") != -1) {
url = "javascript:history.go(" + url + ")";
} else {
url = "javascript:location.href='" + request.getContextPath()
+ "" + url + "'";
}
} else {
url = "javascript:history.go(-1)";
}
request.setAttribute("info", info);
request.setAttribute("url", url);
request.setAttribute("errorLevel", errorLevel);
}
/**
* 将单个对象转换成JSON对象
*
* @param obj
* Object
*/
public void convertObjToJson(Object obj) {
try {
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
Gson gson = new GsonBuilder().setDateFormat(this.datafomat)
.create();
PrintWriter out = response.getWriter();
out.print(gson.toJson(obj));
out.flush();
} catch (IOException e) {
logger.error("处理JSON对象出错", e);
}
}
/**
* 将单个对象转换成JSON对象
*
* @param obj
* Object
*/
public String convertObjToJsonStr(Object obj) {
try {
Gson gson = new GsonBuilder().setDateFormat(this.datafomat)
.create();
return gson.toJson(obj);
} catch (Exception e) {
logger.error("处理JSON对象出错", e);
return "";
}
}
@Override
public void setSession(Map<String, Object> session) {
this.sessionManager = session;
}
/**
* 获取分页工具
*
* 汪杰 2011-12-31 添加
*/
@SuppressWarnings("rawtypes")
public Page initPage() {
int limit = 0;
int pageNo = 1;
String parameter_limit = request.getParameter("rows");
String parameter_pageNo = this.getPageNo();
if (StringUtils.isBlank(parameter_limit)) {
limit = DEFAULT_PAGE_SIZE;
} else {
limit = Integer.valueOf(parameter_limit);
}
if (StringUtils.isBlank(parameter_pageNo)
|| parameter_pageNo.equals("0")) {
pageNo = 1;
} else {
pageNo = Integer.valueOf(parameter_pageNo);
}
request.setAttribute("pageNo", pageNo);
request.setAttribute("rows", limit);
Page page = new Page();
page.setPageSize(limit);
page.setPageNo(pageNo);
return page;
}
public String getPageNo() {
return pageNo;
}
public void setPageNo(String pageNo) {
this.pageNo = pageNo;
}
/**
* 向界面输出html
*
* @param html
* String
* @param isCache
* boolean
* @throws IOException
*/
public void outPrint(String html, boolean isCache) throws IOException {
if (isCache) {
nocache();
}
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.print(html);
out.flush();
}
/**
* 去除缓存
*/
public void nocache() {
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
}
/**
* 设置导出Excel报表下载的文件头
*
* @param response
* HttpServletResponse 响应头
* @param outfilename
* String 导出的文件名
* @throws Exception
*/
protected void initResponse(HttpServletResponse response, String outfilename)
throws Exception {
response.reset();
response.setContentType(CONTENT_TYPE);
response.setHeader("Content-Disposition", "attachment;filename="
+ new String(outfilename.getBytes(), "iso-8859-1"));
}
/**
* 设置excel导出参数
*
* @param page
* Page 分页数据信息
*/
@SuppressWarnings("rawtypes")
protected void setExcelParameter(Page page) {
Map<String, Object> excelParemerts = new HashMap<String, Object>();
excelParemerts.put("sql", page.getSql());
ExportUtil.intExportParameters(getRequest(), excelParemerts);
}
}