zoukankan      html  css  js  c++  java
  • Struts2,oracle实现GOOGLE的分页样式


    BAIDU的搜索

    我的实现,跟google的是一样的,没有像百度一样加载20条


    要修改的地方分为三处:Pager.java,Action,jsp

    Pager.java

    是用来存储各种页面属性以及定义输出到页面的分页样式的。

    Action

    则是将数据库里面的数据查询出来,然后将其传输到页面,当然还有Pager.java里面的输出样式也在这里面传输到页面。

    jsp

    取出数据显示


    viewSource

    pager.java

    /**
     * @author Atlas Email:generationrent@gmail.com
     *
     */
    public class Pager {
    	private int current;// 当前记录的位置
    	private int size; // 数据总记录
    	private int length;// 每页显示的记录条数
    	private String url;// URL 调用Action里分页请求的URL
    	private String pageHeader;// 导航条前文字
    
    	public Pager(int offset, int size, int length,String url,  String pageHeader) {
    		this.current = offset;
    		this.size = size;
    		this.length = length;
    		this.url = url;
    		this.pageHeader = pageHeader;
    	}
    
    	public int getOffset() {
    		return current;
    	}
    
    	public void setOffset(int offset) {
    		this.current = offset;
    	}
    
    	public int getSize() {
    		return size;
    	}
    
    	public void setSize(int size) {
    		this.size = size;
    	}
    
    	public int getLength() {
    		return length;
    	}
    
    	public void setLength(int length) {
    		this.length = length;
    	}
    
    	public String getUrl() {
    		return url;
    	}
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    
    	public String getPageHeader() {
    		return pageHeader;
    	}
    
    	public void setPageHeader(String pageHeader) {
    		this.pageHeader = pageHeader;
    	}
    
    	/**
    	 * 返回分页导航条
    	 * 
    	 */
    
    	public String getPageNavigation() {
    		String pageNavigation = ""; 
    		
    		if (size > length) {
    			String pref; // 前缀
    			if (url.indexOf("?") > -1) {
    			 
    				pref = "&";
    			} else {
    				 
    				pref = "?";
    			}
    			 
    			if (pageHeader != null && pageHeader.length() > 0) {
    				pageNavigation = pageHeader + " : ";
    			}
    			//  包含“<<”(第一页)和“<”(前一页)
    			if (current > 0) {
    				pageNavigation += "<a href='" + url + pref
    						+ "current=0'>[首页]</a>\n" + "<a href='" + url + pref
    						+ "current=" + (current - length) + "'>[<]</a>\n";
    			}
    			// 导航条中,排头的那一页的current值
    			int startOffset;
    			
    			int radius = Constants.MAX_PAGE_INDEX / 2 * length;
    			
    			if (current < radius
    					|| this.pageCount() <= Constants.MAX_PAGE_INDEX) {
    				
    				startOffset = 0;
    			} else if (current < size - radius) {
    				startOffset = current - radius;
    			} else {
    				startOffset = (size / length - Constants.MAX_PAGE_INDEX)
    						* length;
    			}
    			for (int i = startOffset; i < size
    					&& i < startOffset + Constants.MAX_PAGE_INDEX * length; i += length) {
    				if (i == current) {
    					// 当前页号,加粗显示
    					pageNavigation += "<b>" + (i / length + 1) + "</b>\n";
    				} else {
    					
    					pageNavigation += "<a href='" + url + pref + "current=" + i
    							+ "'>" + (i / length + 1) + "</a>\n";
    				}
    			}
    			//(下一页)和“>>”(最后一页)
    			if (current < size - length) {
    				pageNavigation += "<a href='" + url + pref + "current="
    						+ (current + length) + "'>[>]</a>\n" + "<a href='"
    						+ url + pref + "current=" + lastPageOffset()
    						+ "'>[尾页]</a>\n";
    			}
    			
    			return pageNavigation;
    		}
    		
    		else {
    			return "";
    		}
    		//return "";
    	}
    
    	/**
    	 * 返回分页后的总页数
    	 * 
    	
    	 */
    	public int pageCount() {
    		int pagecount = 0;
    		if (size % length == 0) {
    			pagecount = size / length;
    		} else {
    			pagecount = size / length + 1;
    		}
    		return pagecount;
    	}
    
    	/**
    	 * 返回最后一页的起始记录位置
    	
    	 */
    	public int lastPageOffset() {
    		return size - lastPageSize();
    	}
    
    	/**
    	 * 返回最后一页的记录数
    	
    	 */
    	public int lastPageSize() {
    		int lastpagesize = 0;
    		if (size % length == 0) {
    			lastpagesize = length;
    		} else {
    			lastpagesize = size % length;
    		}
    		return lastpagesize;
    	}
    }
    

    action

    /**
     * 用户基本信息管理 控制器
     * 
    
     * @author Atlas Email:generationrent@gmail.com
    * */@Controller@Scope(value = "protoType")@Action(value = "userbaseAction", results = {@Result(name = "success", location = "/jsp/user.jsp") })public class UserBaseInfoMangeAction extends ActionSupport implementsServletRequestAware {private int current;// 起始记录的位置/** * @return the current */public int getCurrent() {return current;}/** * @param current * the current to set */public void setCurrent(int current) {this.current = current;}// 获得requestprivate HttpServletRequest request;// inject beanprivate UserBase userbase;/** * @return the userbase */public UserBase getUserbase() {return userbase;}/** * @param userbase * the userbase to set */public void setUserbase(UserBase userbase) {this.userbase = userbase;}/** * */private static final long serialVersionUID = 1L;/** * 注入 service */@ResourceUserBaseService userbaseService;public void setServletRequest(HttpServletRequest request) {this.request = request;}/** * 查询所有 * * @return */public String query() {// pagination beginfinal int offset = this.getCurrent();final int pagesize = Constants.PAGE_SIZE;// pagination end// 获得所有用户信息List<UserBase> list = this.userbaseService.queryUserBaseInfos(offset,pagesize);final int size = this.userbaseService.getRsUserBaseCount();//请求地址final String url =Constants.QUERY_PATH;Pager p = new Pager(offset, size, pagesize, url, "");request.setAttribute("pager", p);request.setAttribute("userbaseInfosList", list);return SUCCESS;}
    
    Conastants.java 
    

    /**
     * @author Atlas Email:Generationrent@gmail.com
     *
     */
    public class Constants {
    
    	/**
    	 * 页面显示的数字 最大到10 1...10
    	 */
    	public static int MAX_PAGE_INDEX = 10;
    	
    
    	/**
    	 * 每页的记录数
    	 */
    	public static int PAGE_SIZE = 10;
    	/**
    	 * 分页 查询地址
    	 */
    	public static String QUERY_PATH = "http://127.0.0.1:8088/alllig/userbaseAction!query";
    }
    
    Dao

    @Repository
    public class UserBaseDaoImpl implements UserBaseDao {
    	/*
    	 * (non-Javadoc)
    	 * 
    	 * @see com.travelsky.ism.dao.UserBaseDao#queryUserBaseInfos()
    	 */
    	@Override
    	public List<UserBase> queryUserBaseInfos(int offset, int length) {
    		List<UserBase> infoList = null;
    		EntityManager em = null;
    		try {
    			em = JpaUtil.getEntityManger();
    			final String jpaQl = "select userbase from UserBase userbase";
    			Query q = em.createQuery(jpaQl);
    			// 设置起始记录数
    			q.setFirstResult(offset);
    			// 查询多少条记录
    			q.setMaxResults(length);
    			// 获得结果集
    			infoList = q.getResultList();
    
    			for (int i = 0; i < infoList.size(); i++) {
    				System.out.println(infoList.get(i).getUsername());
    			}
    
    		} finally {
    			if (null != em) {
    				em.close();
    			}
    		}
    
    		return infoList;
    	}
    
    	@Override
    	public int getRsUserBaseCount() {
    		Number count = 0;
    		EntityManager em = null;
    		try {
    			final JpaTemplate jpaTemplate = new JpaTemplate(
    					Persistence.createEntityManagerFactory("jpaname"));
    			// 获得记录条数
    			String COUNT_ALL = "select count(*) from UserBase";
    			count = (Number) jpaTemplate.find(COUNT_ALL).get(0);
    
    		} finally {
    			if (null != em) {
    				em.close();
    			}
    		}
    		return count.intValue();
    	}
    }
    
    jsp

    <%@ page import="com.travelsky.ism.util.Pager"%>
    
    <s:iterator var="pager">
    		<jsp:useBean id="pager" type="com.travelsky.ism.util.Pager"   scope="request" />
    		<jsp:getProperty name="pager" property="pageNavigation" />查询结果<p>
    		<br /> 共有记录<jsp:getProperty name="pager" property="size" />条
    		<br /> 每页有<jsp:getProperty name="pager" property="length" />条记录
    		<br />
    </s:iterator>

    REFERENCES:http://www.oschina.net/code/snippet_251973_9435


    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    深入了解C语言
    $_SERVER变量结构
    整理了一份招PHP高级工程师的面试题
    深入探究VC —— 编译器cl.exe(2)【转】http://blog.csdn.net/wangningyu/article/details/4837419
    vs2010 工程设置,调试中的目录问题【转】http://www.cnblogs.com/mlj318/archive/2011/10/09/2203510.html
    深入探究VC —— 链接器link.exe(4)【转】http://blog.csdn.net/wangningyu/article/details/4849452
    移植ffmpeg到VC环境心得 【转】
    深入了解VC++编译器【转】
    VC2010中"Include Directories" 和 "Additional Include Directories"的区别
    深入探究VC —— 资源编译器rc.exe(3)【转】http://blog.csdn.net/wangningyu/article/details/4844687
  • 原文地址:https://www.cnblogs.com/anee/p/2675753.html
Copyright © 2011-2022 走看看