分页工具类 BaseAction

package com.xxxxxxx.bos.web.action.common;

import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.ServletActionContext;
import org.springframework.data.domain.Page;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

    protected T model;
    /**
     * 相关的术语:
     * BaseAction<Area> 参数化类型
     * <>中内容:实际类型参数
    */
    //子类对象创建,父类无参构造执行
    //目的:获取实际类型参数
    public BaseAction() {
        //1、获取当前运行的class
        Class clzz = this.getClass(); //子类Action的Class:AreaAction
        System.err.println(clzz);
        //获取父类class
        //Type getGenericSuperclass() 
        //返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 
        Type type = clzz.getGenericSuperclass();
        
        //2、获取参数化类型
        ParameterizedType pt = (ParameterizedType) type;
        System.err.println(pt);
        //Type[] getActualTypeArguments() 
        //返回表示此类型实际类型参数的 Type 对象的数组。 
        Type[] types = pt.getActualTypeArguments();  //[Area]
        //3、获取实际类型参数
        Class clzzzzz = (Class) types[0]; //Area 的class
        try {
            model = (T) clzzzzz.newInstance();
            System.out.println(model);
        }  catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public T getModel() {
        return model;
    }
    
    //属性驱动接收datagrid分页组件提交参数
    protected int page; //当前页
    protected int rows;//每页显示记录数
    public void setPage(int page) {
        this.page = page;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
    /**
      * @Description: 将Page对象转为json字符串,向浏览器输出
     */
    public void java2Json(Page<T> page, String[] excludes){
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("total", page.getTotalElements());
            map.put("rows", page.getContent());
            
            //将fixedares集合属性排除掉,不转json
            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.setExcludes(excludes);
            
            String json = JSONObject.fromObject(map, jsonConfig).toString();
            
            ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
            ServletActionContext.getResponse().getWriter().write(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * @Description: 将List集合转为json字符串,向浏览器输出
     */
    public void java2Json(List list, String[] excludes){
        try {
            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.setExcludes(excludes);
            String json = JSONArray.fromObject(list, jsonConfig).toString();
            ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
            ServletActionContext.getResponse().getWriter().write(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

posted on 2017-08-15 17:38  0001  阅读(359)  评论(1编辑  收藏  举报