web的分页

step1:

写页面:

buyerList.jsp:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/pages/share/taglib.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表</title>
<link rel="stylesheet" style="text/css"
 href="<c:url value='/css/buyerlist.css'/>" />
<link rel="stylesheet" style="text/css"
 href="<c:url value='/css/jquery.treeview.css'/>" />
<link rel="stylesheet" style="text/css"
 href="<c:url value='/css/screen.css'/>" />
</head>
<body>

 <div id="header"><%@ include
   file="/WEB-INF/pages/share/header.jsp"%></div>
 <div id="contain">
  <div id="menu">
   <%@ include file="/WEB-INF/pages/share/menu.jsp"%>
  </div>
  <div id="right"></div>
  <div id="content">
   <table>
    <tr>
     <td>用户名</td>
     <td>电子邮箱</td>
     <td>性别</td>
     <td>可用</td>
    </tr>
    <c:forEach var="entity" items="${entitys}">
     <tr>
      <td>${entity.username }</td>
      <td>${entity.email }</td>
      <td>${entity.gender.name }</td>
      <td>
       <c:if test="${entity.visable }">可用</c:if>
       <c:if test="${!entity.visable }">禁用</c:if>
      </td>
     <tr>
    </c:forEach>
   </table>
  </div>
 </div>

 <div id="footer"><%@ include
   file="/WEB-INF/pages/share/footer.jsp"%></div>
</body>
</html>

header.jsp:

<%@page pageEncoding="UTF-8"%>
<%@include file="/WEB-INF/pages/share/taglib.jsp"%>
<span>
 总记录数${pageView.recordCount},每页显示${pageView.pageSize}条记录,第[${pageView.currentPage
 }/${pageView.totalPage}]页,
 <c:if test="${pageView.havePrev }">
  <a href="<html:rewrite action='/control/user/list.do'/>?page=1"><strong>第一页</strong>
  </a>&nbsp;&nbsp;
  <a
   href="<html:rewrite action='/control/user/list.do'/>?page=${pageView.currentPage -1}"><strong>上一页</strong>
  </a>&nbsp;&nbsp;
 </c:if> <c:if test="${!pageView.havePrev }">
  <strong>第一页</strong>&nbsp;&nbsp;
  <strong>上一页</strong>&nbsp;&nbsp;
 </c:if> <c:forEach var="cp" begin="${ pageView.fistPage}"
  end="${pageView.lastPage }">
  <c:if test="${pageView.currentPage != cp }">
   <a href="<html:rewrite action='/control/user/list.do'/>?page=${cp}"><strong>第${cp}页</strong>
   </a>&nbsp;&nbsp;
  </c:if>
  <c:if test="${pageView.currentPage == cp }">
   <strong>第${cp}页</strong>&nbsp;&nbsp;
  </c:if>
 </c:forEach> <c:if test="${pageView.haveNext }">
  <a
   href="<html:rewrite action='/control/user/list.do'/>?page=${pageView.currentPage +1}"><strong>下一页</strong>
  </a>&nbsp;&nbsp;
  <a
   href="<html:rewrite action='/control/user/list.do'/>?page=${pageView.totalPage}"><strong>尾页</strong>
  </a>
 </c:if> <c:if test="${!pageView.haveNext }">
  <strong>下一页</strong>&nbsp;&nbsp;
  <strong>尾页</strong>
 </c:if> </span>

step2:

写页面辅助类:package zzg.shop.web.support;

import java.io.Serializable;

public final class Page implements Serializable {
 private static final long serialVersionUID = -589401814262887381L;
 private long recordCount;// 记录总数
 private int pageSize;// 每页记录数
 private long fistPage = 1;// 显示的起始页
 private long lastPage = 1;// 显示的最末页
 private long maxPage = 10;// 每页显示多少页
 private long currentPage = 1;// 当前页号
 private long totalPage;// 页面总数
 private boolean haveNext;// 是否有下一页
 private boolean havePrev;// 是否有上一页

 /**
  *
  * @param recordCount
  *            记录总数
  * @param pageSize
  *            每页记录数
  * @param currentPage
  *            当前页
  * @param maxPage
  *            每次最多显示页数
  */
 public Page(long recordCount, int pageSize, long currentPage, long maxPage) {
  calculatePage(recordCount, pageSize, currentPage, maxPage);
 }

 /**
  * 默认构造函数,总记录数1,每页记录数1,当前页1,每次显示页数1
  */
 public Page() {
  calculatePage(1, 1, 1, 1);
 }

 public long getRecordCount() {
  return recordCount;
 }

 /**
  * 设置总记录数
  *
  * @param recordCount
  */
 public void setRecordCount(long recordCount) {
  calculatePage(recordCount, pageSize, currentPage, maxPage);
 }

 public int getPageSize() {
  return pageSize;
 }

 /**
  * 每页显示记录数
  *
  * @param pageSize
  */
 public void setPageSize(int pageSize) {
  calculatePage(recordCount, pageSize, currentPage, maxPage);
 }

 public long getFistPage() {
  return fistPage;
 }

 /**
  * 设置起始页
  *
  * @param fistPage
  */
 public void setFistPage(long fistPage) {
  this.fistPage = fistPage;
  if (fistPage < 1)
   this.fistPage = 1;
  if (fistPage > this.totalPage)
   this.fistPage = this.totalPage;
  long t = this.fistPage + maxPage - 1;
  lastPage = t > this.totalPage ? this.totalPage : t;
 }

 public long getLastPage() {
  return lastPage;
 }

 public long getCurrentPage() {
  return currentPage;
 }

 /**
  * 设置当前页
  *
  * @param currentPage
  */
 public void setCurrentPage(long currentPage) {
  this.currentPage = currentPage;
  if (currentPage < 1)
   this.currentPage = 1;
  if (currentPage > this.totalPage)
   this.currentPage = this.totalPage;

  if (currentPage < this.fistPage)
   this.fistPage = this.currentPage - this.maxPage + 1;
  if (currentPage > this.lastPage)
   this.fistPage = this.currentPage;
  setFistPage(fistPage);

  if (this.currentPage > 1)
   this.havePrev = true;
  else
   this.havePrev = false;
  if (this.currentPage < this.totalPage)
   this.haveNext = true;
  else
   this.haveNext = false;

 }

 public long getTotalPage() {
  return totalPage;
 }

 public boolean isHaveNext() {
  return haveNext;
 }

 public boolean isHavePrev() {
  return havePrev;
 }

 // 当前页起始记录
 public long getFistRecord() {
  return this.pageSize * (this.currentPage - 1);
 }

 // 当前页结束记录
 public long getLastRecord() {
  long t = getFistRecord() + this.pageSize - 1;
  return t < this.recordCount ? t : this.recordCount - 1;
 }

 /**
  * 计算页面参数值
  *
  * @param recordCount
  * @param pageSize
  * @param currentPage
  * @param maxPage
  */
 private void calculatePage(long recordCount, int pageSize,
   long currentPage, long maxPage) {
  /* 参数非法,抛出异常 */
  if (recordCount <= 0 || pageSize <= 0 || currentPage <= 0)
   throw new RuntimeException("不合法页面构建参数!");

  this.recordCount = recordCount;
  this.pageSize = pageSize;

  this.totalPage = recordCount % pageSize == 0 ? recordCount / pageSize
    : recordCount / pageSize + 1;
  setMaxPage(maxPage);
  setFistPage(fistPage);
  setCurrentPage(currentPage);
 }

 public long getMaxPage() {
  return maxPage;
 }

 /**
  * 设置每次显示页数
  *
  * @param maxPage
  */
 public void setMaxPage(long maxPage) {
  if (maxPage < 1)
   return;
  setFistPage(fistPage);
  this.maxPage = maxPage;
 }
}
step3:

配置strut-config.xml:

<form-beans>
  <form-bean name="buyerForm"
   type="zzg.shop.web.formbean.user.BuyerFormBean">
  </form-bean>

<action-mappings>
   <action path="/control/user/list" name="buyerForm" scope="request">
   <forward name="buyerListUI" path="/WEB-INF/pages/user/buyerlist.jsp"></forward>
  </action>
 </action-mappings>

step4:

写formBean及Actionpackage zzg.shop.web.formbean.user;

BuyerFormBean.java

import org.apache.struts.action.ActionForm;

public class BuyerFormBean extends ActionForm{
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private String username;
 private String password;
 private String password2;
 private String email;
 private long page=1;
 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 public void setPassword2(String password2) {
  this.password2 = password2;
 }

 public String getPassword2() {
  return password2;
 }

 public long getPage() {
  return page;
 }

 public void setPage(long page) {
  this.page = page;
 }
}
BuyerListAction.java

package zzg.shop.web.action.user;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Controller;

import zzg.shop.bean.user.Buyer;
import zzg.shop.service.base.QueryResult;
import zzg.shop.service.user.BuyerService;
import zzg.shop.web.formbean.user.BuyerFormBean;
import zzg.shop.web.support.Page;

@Controller("/control/user/list")
public class BuyerListAction extends Action {
 @Resource BuyerService buyerService;
 private Page page = new Page();
 @Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  page.setRecordCount(buyerService.getCount());
  page.setMaxPage(3);
  page.setPageSize(3);
  BuyerFormBean buyerBean = (BuyerFormBean)form;
  page.setCurrentPage(buyerBean.getPage());
  request.setAttribute("pageView", page);
  QueryResult<Buyer> entitys=buyerService.getScrollResult((int)page.getFistRecord(), (int)page.getPageSize());
  
  request.setAttribute("entitys", entitys.getResultList());
  return mapping.findForward("buyerListUI");
 }

}
附上dao及先关类:

dao.java

package zzg.shop.service.base;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface Dao<T> {
 /**
  * 保存实体
  *
  * @param entity
  *            要保存的实体
  */
 public void save(T entity);

 /**
  * 更新实体
  *
  * @param entity
  *            要更新的实体
  */
 public void update(T entity);

 /**
  * 删除实体
  *
  * @param entity
  *            要删除的实体id
  */
 public void delete(Serializable entityid);

 /**
  * 得到实体
  *
  * @param entityid     实体的id
  * @return 实体
  */
 public T find(Serializable entityid);

 /**
  *
  * @return 所有实体
  */
 public List<T> findAll();

 /**
  *
  * @return 得到实体数量
  */
 public long getCount();

 /**
  * 分页查询
  * @param fistResult
  * @param maxResult
  * @return
  */

 public QueryResult<T> getScrollResult(int fistResult, int maxResult);
 /**
  * 带排序的分页查询
  * @param fistResult
  * @param maxResult
  * @param orders
  * @return
  */
 public QueryResult<T> getScrollResult(int fistResult, int maxResult,Map<String,Boolean> orders);
 /**
  * 带条件和排序的分页查询
  * @param fistResult
  * @param maxResult
  * @param orders
  * @param wheres
  * @param params
  * @return
  */
 public QueryResult<T> getScrollResult(int fistResult, int maxResult,Map<String,Boolean> orders,String[] wheres,Object[] params);
}

 

genericServiceBean.java
package zzg.shop.service.base;

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

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public abstract class genericServiceBean<T> implements Dao<T> {
 @PersistenceContext
 protected EntityManager em;

 private Class<T> entityClass = getEntityClass();

 @SuppressWarnings({ "unchecked" })
 private Class<T> getEntityClass() {
  Type type = this.getClass().getGenericSuperclass();
  if (type instanceof ParameterizedType) {
   ParameterizedType parameterizedType = (ParameterizedType) type;
   return (Class<T>) parameterizedType.getActualTypeArguments()[0];
  }
  return null;
 }

 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 public QueryResult<T> getScrollResult(int fistResult, int maxResult) {
  return getScrollResult(fistResult, maxResult, null, null, null);
 }

 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 public QueryResult<T> getScrollResult(int fistResult, int maxResult,
   Map<String, Boolean> orders) {
  return getScrollResult(fistResult, maxResult, orders, null, null);
 }

 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 @SuppressWarnings("unchecked")
 public QueryResult<T> getScrollResult(int fistResult, int maxResult,
   Map<String, Boolean> orders, String[] wheres, Object[] params) {
  String entityName = entityClass.getSimpleName();
  QueryCreater qc = new QueryCreater(entityName, "o");
  qc.addOrderBy(orders);
  qc.addWhere(wheres);
  //System.out.println(qc.CreateQueryString());
  Query query =qc.CreateQuery(em, params);
  query.setFirstResult(fistResult).setMaxResults(maxResult);
  QueryResult<T> qr = new QueryResult<T>();
  qr.setResultList(query.getResultList());
  qc=new QueryCreater(entityName, "o",new String[]{"count()"});
  qc.addWhere(wheres);
  query = qc.CreateQuery(em, params);
  qr.setTotalResult((Long) query.getSingleResult());
  return qr;
 }

 @Override
 public void save(T entity) {
  em.persist(entity);
 }

 @Override
 public void update(T entity) {
  em.merge(entity);
 }

 @Override
 public void delete(Serializable entityid) {
  em.remove(em.getReference(entityClass, entityid));
 }

 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 public T find(Serializable entityid) {
  return em.find(entityClass, entityid);
 }

 @SuppressWarnings("unchecked")
 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 public List<T> findAll() {
  String query = "select o from " + entityClass.getName() + " o";
  return em.createQuery(query).getResultList();
 }

 @Override
 @Transactional(propagation = Propagation.NOT_SUPPORTED)
 public long getCount() {
  String query = "select count(o) from " + entityClass.getName() + " o";
  return (Long) em.createQuery(query).getSingleResult();
 }
}

 

QueryCreater.java


package zzg.shop.service.base;

import java.util.Map;
import java.util.Map.Entry;

import javax.persistence.EntityManager;
import javax.persistence.Query;

public class QueryCreater {
 private String alias;
 private int index = 0;
 private StringBuilder body = new StringBuilder();
 private StringBuilder order = new StringBuilder();
 private StringBuilder where = new StringBuilder();

 public QueryCreater(String className, String alias, String[] columns) {
  this.alias = alias;
  body.append("select ");
  if (columns != null)
   for (String column : columns) {
    if ("count()".equals(column.trim()))
     body.append("count(").append(alias).append("),");
    else
     body.append(alias).append(".").append(column).append(",");
   }
  body.deleteCharAt(body.length()-1);
  body.append(" from ").append(className).append(" ").append(alias);
 }

 public QueryCreater(String className, String alias) {
  this.alias = alias;
  body.append("select ").append(alias).append(" from ").append(className)
    .append(" ").append(alias);
 }

 public QueryCreater() {

 }

 public void init(String className, String alias) {
  this.alias = alias;
  body.append("select ").append(alias).append(" from ").append(className)
    .append(" ").append(alias);
 }

 public QueryCreater addOrderBy(String field, boolean asc) {
  if (order.length() != 0)
   order.append(",");
  order.append(alias).append(".").append(field).append(" ")
    .append(asc ? "asc" : "desc");
  return this;
 }

 public QueryCreater addOrderBy(Map<String, Boolean> orders) {
  if (orders != null)
   for (Entry<String, Boolean> entry : orders.entrySet()) {
    if (order.length() != 0)
     order.append(",");
    order.append(alias).append(".").append(entry.getKey())
      .append(" ").append(entry.getValue() ? "asc" : "desc");
   }
  return this;
 }

 public QueryCreater addWhere(String condition) {
  if (where.length() != 0)
   where.append(" and ");
  where.append(alias).append(".").append(condition).append("?")
    .append(index++);
  return this;
 }

 public QueryCreater addWhere(String[] wheres) {
  if (wheres != null)
   for (String condition : wheres) {
    if (where.length() != 0)
     where.append(" and ");
    where.append(alias).append(".").append(condition).append("?")
      .append(index++);
   }
  return this;
 }

 public String CreateQueryString() {
  StringBuilder sb = new StringBuilder();
  sb.append(body);
  if (where.length() != 0) {
   sb.append(" where ").append(where);
  }
  if (order.length() != 0) {
   sb.append(" order by ").append(order);
  }
  return sb.toString();
 }

 public Query CreateQuery(EntityManager em, Object[] params) {
  Query query = null;
  if (em != null) {
   query = em.createQuery(CreateQueryString());
   if (params != null)
    for (int i = 0; i < params.length; i++)
     query.setParameter(i, params[i]);
  }
  return query;
 }
}

 

QueryResult
package zzg.shop.service.base;

import java.util.List;

public class QueryResult<T> {
 /**
  * 结果集
  */
 private List<T> resultList;
 /**
  * 结果总数
  */
 private long totalResult;

 public List<T> getResultList() {
  return resultList;
 }

 public void setResultList(List<T> resultList) {
  this.resultList = resultList;
 }

 public long getTotalResult() {
  return totalResult;
 }

 public void setTotalResult(long totalResult) {
  this.totalResult = totalResult;
 }
}

 

BuyerService.java

package zzg.shop.service.user;

import zzg.shop.bean.user.Buyer;
import zzg.shop.service.base.Dao;

public interface BuyerService extends Dao<Buyer> {
 
 /**
  * 判断用户名是否存在
  * @param username
  * @return
  */
 public boolean exsit(String username);
 
 /**
  * 判断用户名是否存在及密码是否正确
  * @param username
  * @param password
  * @return
  */
 public boolean validate(String username,String password);
}

BuyerServiceBean.java

package zzg.shop.service.user.impl;

import javax.persistence.Query;

import org.springframework.stereotype.Service;

import zzg.shop.bean.user.Buyer;
import zzg.shop.service.base.genericServiceBean;
import zzg.shop.service.user.BuyerService;
import zzg.shop.utils.MD5;

@Service
public class BuyerServiceBean extends genericServiceBean<Buyer> implements
  BuyerService {

 /**
  * 以MD5保存用户密码
  */
 @Override
 public void save(Buyer entity) {
  entity.setPassword(MD5.MD5Encode(entity.getPassword()));
  super.save(entity);
 }

 public boolean exsit(String username) {
  Query query = em
    .createQuery("select count(o) from Buyer o where o.username=?1");
  query.setParameter(1, username);
  return (Long) query.getSingleResult() > 0;
 }

 @Override
 public boolean validate(String username, String password) {
  Long result = (Long) em
    .createQuery(
      "select count(o) from Buyer o where o.username=?1 and password=?2")
    .setParameter(1, username)
    .setParameter(2, MD5.MD5Encode(password)).getSingleResult();
  return result > 0;
 }
}

 

先写到这里,有空再梳理下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值