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();
}
}
}

分页工具类 BaseAction的更多相关文章

  1. PHP常用之封装分页工具类

    分页基本上是每个项目都会使用到的,所以呢,把它封装成一个工具类,以后直接调用就可以了(虽然TP框架的灰常强大,但是自己封一个也未尝不可.),这样既省时又省力还赚'工分'. 我封的这个分页工具类还比较完 ...

  2. PageUtil.java分页工具类

    package com.chabansheng.util; /** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * ...

  3. 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  4. c#分页工具类,完美实现List分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Proje ...

  5. SpringBoot集成Mybatis-PageHelper分页工具类,实现3步完成分页

    在Mybatis中,如果想实现分页是比较麻烦的,首先需要先查询出总的条数,然后再修改mapper.xml,为sql添加limit指令. 幸运的是现在已经不需要这么麻烦了,刘大牛实现了一个超牛的分页工具 ...

  6. JAVA分页工具类

    最近写了一个代码生成工具,分享下该工具下的分页工具 一.分页工具类 package com.qy.code.api.page; import java.io.Serializable; import ...

  7. 工具类 分页工具类PageParamBean

    自己编写的分页工具类,根据不同的数据库类型,生成对应的分页sql信息,分享给大家,希望大家共勉,工具类有些地方,大家可能不需要,请根绝自己的需要进行修改使用,核心逻辑都在,如果大家觉得有什么不妥,欢迎 ...

  8. 大话分页(补充)——Threadlocal封装offSet和pageSize简化分页工具类

    经过前两篇文章(大话分页一.大话分页二)的介绍,我认为我想介绍的东西已经介绍完了,不过想精益求精的童鞋可以继续看本篇文章. 在第一篇文章中介绍了一个分页的工具类(具体请看大话分页一),从实现功能上来说 ...

  9. 分页工具类PageResult

    1.工具类 public class PageResult implements Serializable { private Long total;//总记录数 private List rows; ...

随机推荐

  1. AppDelegate减负之常用三方封装 - 友盟推送篇

    之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...

  2. Ionic 应用图标,信息修改

    Ionic 应用图标,信息修改 Ionic 应用图标 修改 准备好替换的图标并生成各个尺寸的图标 1.使用命令行进入项目根目录,执行命令ionic resources 替换的图片放在resources ...

  3. 伙计,给我来一杯package.json!不加糖

    前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个json文件,而不能写入JS对象. 所以我 ...

  4. MyBatis源码解析【4】反射和动态代理

    通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...

  5. 如何将notMNIST转成MNIST格式

    相信了解机器学习的对MNIST不会陌生,Google的工程师Yaroslav Bulatov 创建了notMNIST,它和MNIST类似,图像28x28,也有10个Label(A-J). 在Tenso ...

  6. 两个java项目,跨域访问时,浏览器不能正确解析数据问题

    @Controller@RequestMapping(value = "api/item/cat")public class ApiItemCatController { @Aut ...

  7. 深入 HTML5 Web Worker 应用实践:多线程编程

    深入 HTML5 Web Worker 应用实践:多线程编程 HTML5 中工作线程(Web Worker)简介 至 2008 年 W3C 制定出第一个 HTML5 草案开始,HTML5 承载了越来越 ...

  8. C#装箱拆箱

    .       装箱和拆箱是一个抽象的概念 2.       装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型        利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类 ...

  9. 理解Linux文件系统之inode

    很少转发别人的文章,但是这篇写的太好了. 理解inode   作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...

  10. SignalR在ASP.NET MVC中的应用

    一.简介 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的客户端变得 ...