PageResult 类用来存放查询结果
public class PageResult<T> {
private Query query;
private int count;
private List<T> results;
private int pageNO;
private int pageSize;
private int pageCount;
public PageResult(Query query, List<T> results, int count, int pageNO, int pageSize) {
this.query = query;
this.results = results;
this.count = count;
this.pageNO = pageNO;
this.pageSize = pageSize;
if (count % pageSize == 0) {
pageCount = count / pageSize;
}
else {
pageCount = count / pageSize + 1;
}
}
......
Query类用来存放查询条件
public class Query extends java.util.HashMap<String, Object> {
private static Log log = LogFactory.getLog(Query.class);
public static final String DEFAULT_QUERY_NAME = "query";
public static final String PAGENO_NAME = "pageNO";
public static final String PAGESIZE_NAME = "pageSize";
public static final String OFFSET_NAME = "OFFSET";
public static final String ROWS_NAME = "ROWS";
public final static Integer DEFAULT_PAGENO = new Integer(1);
public final static Integer DEFAULT_PAGESIZE = new Integer(15);
private final String name;
private Integer pageNO;
private Integer pageSize;
public String getName() {
return name;
}
public Query() {
this(DEFAULT_QUERY_NAME);
}
public Query(String name) {
this(name, DEFAULT_PAGENO);
}
public Query(Integer pageNO) {
this(DEFAULT_QUERY_NAME, pageNO);
}
public Query(String name, Integer pageNO) {
this(name, pageNO, DEFAULT_PAGESIZE);
}
public Query(Integer pageNO, Integer pageSize) {
this(DEFAULT_QUERY_NAME, pageNO, pageSize);
}
public Query(String name, Integer pageNO, Integer pageSize) {
this(name, pageNO, pageSize, null);
}
public Query(Integer pageNO, Integer pageSize, Map<String, Object> params) {
this(DEFAULT_QUERY_NAME, pageNO, pageSize, params);
}
public Query(String name, Integer pageNO, Integer pageSize, Map<String, Object> params) {
if (params != null) {
putAll(params);
}
if (pageNO == null) {
pageNO = DEFAULT_PAGENO;
}
if (pageSize == null) {
pageSize = DEFAULT_PAGESIZE;
}
this.name = name;
this.pageNO = pageNO;
this.pageSize = pageSize;
put(PAGENO_NAME, pageNO);
put(PAGESIZE_NAME, pageSize);
}
@Override
public Object put(String key, Object value) {
if (PAGENO_NAME.equals(key)) {
this.pageNO = (Integer) value;
compute(pageNO, pageSize);
}
else if (PAGESIZE_NAME.equals(key)) {
this.pageSize = (Integer) value;
compute(pageNO, pageSize);
}
if (value == null
|| (value instanceof String && ((String)value).isEmpty())
) {
return null;
}
return super.put(key, value);
}
private void compute(int pageNO, int pageSize) {
// oracle
// int offset = (pageNO - 1) * pageSize + 1;
// int rows = offset + pageSize - 1;
// mysql
int offset = (pageNO - 1) * pageSize ;
int rows = offset + pageSize;
put(OFFSET_NAME, new Integer(offset));
put(ROWS_NAME, new Integer(rows));
}
}
PagingUtil 用来创建查询对象Query
public class PagingUtil {
/** 是否需要清除Session */
public final static String RESEARCH = "research";
/** 指定Session中存储Query的key名称 */
public final static String HTML_QUERY_NAME = "query";
public static Query create() {
return new Query();
}
public static Query create(String name) {
return new Query(name);
}
// public static Query create(Integer pageNO, Integer pageSize) {
// return new Query(pageNO, pageSize);
// }
//
// public static Query create(Integer pageNO, Integer pageSize) {
// return new Query(pageNO, pageSize);
// }
//
// public static Query create(Integer pageNO, Integer pageSize, Map<String, Object> params) {
// return new Query(pageNO, pageSize, params);
// }
/**
* Struts2 shortcut,基于struts2的快捷方式
* @return
*/
public static Query get() {
return get(ServletActionContext.getRequest());
}
public static Query get(HttpServletRequest request) {
HttpSession session = request.getSession();
String SessionKey = Query.DEFAULT_QUERY_NAME;
if (request.getParameter(HTML_QUERY_NAME) != null) {
SessionKey = request.getParameter(HTML_QUERY_NAME);
}
String research = request.getParameter(PagingUtil.RESEARCH);
if (research != null) {
switch (research) {
case "1":
case "y":
case "Y":
case "yes":
case "YES":
case "true":
case "TRUE":
session.removeAttribute(SessionKey);
}
}
// it's req from menu
String nav = request.getParameter("_from");
if (nav != null) {
session.removeAttribute(SessionKey);
}
Query query = (Query) session.getAttribute(SessionKey);
if (query == null) {
query = create(SessionKey); // and store sessionkey to query, same time
session.setAttribute(query.getName(), query);
}
// put page no. to query object
String pn = request.getParameter(Query.PAGENO_NAME);
if (pn != null && pn.length()>0 ) {
try {
Integer pageNO = Integer.valueOf(pn);
query.put(Query.PAGENO_NAME, pageNO);
} catch (java.lang.NumberFormatException e) {}
}
// put session pagesize to query object
{
User user = (User) ActionContext.getContext().getSession().get(User.SESSION_KEY);
if (user.getCustom() != null) {
Integer pageSize = user.getCustom().getPagesize();
if (pageSize != null) {
query.put(Query.PAGESIZE_NAME, pageSize);
}
}
}
// put request pagesize to query object
String ps = request.getParameter(Query.PAGESIZE_NAME);
if (ps != null && ps.length()>0) {
try {
Integer pageSize = Integer.valueOf(ps);
query.put(Query.PAGESIZE_NAME, pageSize);
} catch (java.lang.NumberFormatException e) {}
}
return query;
}
}
这样在Action里使用
Query query = PagingUtil.get();
query.put("name", name);
PageResult<Employee> userPage = employeeService.queryEmployeePage(q);
html是这样
<div class="SearchForm">
<header>Search Org</header>
<form action="ListOrg.do" class="QueryForm">
<input type="hidden" name="research" value="1">
<section>
<div>
<Label>Name</Label>
<input type="text" autofocus="autofocus" name="name" value="${name }">
</div>
</section>
<footer>
<input type="submit">
</footer>
</form>
</div>