论坛首页 入门技术论坛

show下我的分页类

浏览 21695 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-11-18  
至少用StringBuffer来拼吧
0 请登录后投票
   发表时间:2008-11-18  
呵呵,多谢提出宝贵建议,
还有楼上说的JS组件,偶没用过,能推荐几个不
0 请登录后投票
   发表时间:2008-11-18  
恩。。。。
LS几个说的js组建还是不错的
0 请登录后投票
   发表时间:2008-11-18  
xuming9 写道
icefire 写道
输出都写死了,无法定制输出内容,无法定义样式,无法国际化,GetParamsFromCurrentUrl()……总之,很差。

<div id="product_page">
     ${pr.strlink }
</div>
样式可以定义,
国际化也可以使用哦,只是目前我这个项目没涉及到国际化,没改
这只是我个人使用的,有很多缺点,大家讨论下嘛,
多谢楼上的意见,希望大家多多提出意见,多多完善


其实这都源于一个原因,你把分页展现写死在了类里。假如用户要改成像JAVAEYE一样的分页效果呢?
更假如有的界面要一种效果,另外的页面又要另一种效果呢?
虽然样式是可以定义,但很难细化。。。
真正的样式不只是字体,大小,颜色……还包括你的输出文字。
比如 第2/3页,改成 当前第 2 页,共 3 页,
比如用户要跳转是下拉选的呢?

留白用CSS来定义,不要用&nbsp

多看看别人的吧,比如displaytag怎么处理的。虽然我觉得也不怎么好!主要自由度还不够大。。
分页的工具有很多,自己多搜搜吧!

以前我和你一样,不过我是写死在taglib中。

str1 = str1 + "&" + paraName + "=" + paraValue;
不要用字符串加和,用stringbuilder,其他地方也是
其实可以用replace把page参数去掉

国际化需求是少的,不过改视图中名称的情况是多的,改一个资源文件多好,并且保证一致,不会出现某个页面少打一个字。。。低耦合总是好的。其实国际化也不会增加多少工作。不过选择权在自己手上,自己怎么选,那得看自己了。

1 请登录后投票
   发表时间:2008-11-18  
显示和分页逻辑偶合在一起了。和跟html有关的都想办法去掉
0 请登录后投票
   发表时间:2008-11-18  
xuming9 写道
package com.xm.utils;

import java.util.Enumeration;

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

import com.kangsheng.cus.common.dbconn.DaoFactory;

// Referenced classes of package com.sihitech.tools:
//            DaoFactory

public class PageRoll {
	private String currentUrl;

	// private PageContext page;

	private DaoFactory pv;

	private HttpServletRequest request;

	private HttpServletResponse response;

	private String strParams;

	private String strlink;

	public PageRoll(HttpServletRequest request, HttpServletResponse response,
			DaoFactory pv) {
		currentUrl = "";
		strParams = "";
		this.request = request;
		this.response = response;
		this.pv = pv;
		currentUrl = request.getRequestURL().toString();

		strParams = GetParamsFromCurrentUrl();
	}

	private String GetParamsFromCurrentUrl() {
		String str1 = "";
		String paraValue = "";
		for (Enumeration enu = request.getParameterNames(); enu
				.hasMoreElements();) {
			String paraName = (String) enu.nextElement();
			paraValue = request.getParameter(paraName);
			if (!paraName.equals("page"))
				str1 = str1 + "&" + paraName + "=" + paraValue;
		}

		return str1;
	}

	public void Show(boolean allRecord, boolean pageInfo, boolean pageNav,
			boolean jumpPage) {
		// PrintWriter out = response.getWriter();
		// out.print("<table border=0> <tr><td>");
		String link = "";
		if (allRecord)
			link = link + ShowTotalRecord();
		if (pageInfo)
			link = link + ShowPageInfo();
		if (pageNav)
			link = link + ShowPageNav();
		if (jumpPage)
			link = link + ShowJumpPage();
		this.strlink = link;
		// out.print("</td></tr></table>");
	}

	private String ShowJumpPage() {
		// PrintWriter out = response.getWriter();
		String link = "";
		link = link
				+ "转到第<input type='text' name='page' size='1'><span>页</span><input type=button value='GO' onclick='goToPage()'>";
		link = link + "<script language='javascript'>";
		link = link + "function goToPage(){";
		link = link + "value=document.all.page.value;";
		link = link
				+ "if(value.indexOf(\".\")==-1 && value.indexOf(\"-\")==-1 && value!==\"\" && !isNaN(value) && value>0 && value<"
				+ (pv.GetTotalPage() + 1) + "){";
		link = link + "location.assign('" + currentUrl + "?page='+value+'"
				+ strParams + "')";
		link = link + "}";
		link = link + "}";
		link = link + "</script>";
		return link;
	}

	private String ShowPageInfo() {
		// PrintWriter out = response.getWriter();
		String link = "第" + pv.GetCurrentPage() + "/" + pv.GetTotalPage()
				+ "页&nbsp";
		return link;
	}

	private String ShowPageNav() {
		// PrintWriter out = response.getWriter();
		String link = "";
		if (pv.GetTotalPage() > 1)
			link = "<a href='" + currentUrl + "?page=1" + strParams
					+ "'><span>首页</span></a>&nbsp;";
		else
			link = "<span>首页&nbsp;</span>";
		//
		if (pv.GetHasPrev())
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetPrevPageNumber() + strParams + "'><span>上页</span></a>&nbsp;";
		else
			link = link + "<span>上页&nbsp;</span>";
		//
		if (pv.GetHasNext())
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetNextPageNumber() + strParams + "'><span>下页</span></a>&nbsp;";
		else
			link = link + "<span>下页&nbsp;</span>";
		//
		if (pv.GetTotalPage() > 1) {
			link = link + "<a href='" + currentUrl + "?page="
					+ pv.GetTotalPage() + strParams + "'><span>尾页</span></a>&nbsp;";
			return link;
		} else {
			link = link + "<span>尾页&nbsp;</span>";
			return link;
		}
	}

	private String ShowTotalRecord() {
		// PrintWriter out = response.getWriter();
		String link = "<span>共" + pv.GetTotalRecord() + "条记录&nbsp;</span>";
		return link;
	}

	public String getStrlink() {
		return strlink;
	}

	public void setStrlink(String strlink) {
		this.strlink = strlink;
	}

}


使用时,在action中建立该类的对象pr,并执行public void Show(boolean allRecord, boolean pageInfo, boolean pageNav,boolean jumpPage),将该对象放入ModelAndView,在页面使用${pr.strlink }就可以实现分页,如图


本人从事JAVA才1年,希望达到抛砖引玉的效果,大家把自己的工具拿出来show show,共同研究下,学习下
也建议版主弄一个工具包专题




好像写的是太死了,不应该把HTML也写到里面去,这个是基本
0 请登录后投票
   发表时间:2008-11-18  
把request和response都加进类里面,耦合太厉害了,不太灵活。
0 请登录后投票
   发表时间:2008-11-18  
用string来拼!!不好吧!
支持show代码的胆量,我怕一show就成隐藏或者新手
0 请登录后投票
   发表时间:2008-11-18  
把JavaScript和显示放在里面总感觉不是很好。
0 请登录后投票
   发表时间:2008-11-18  
再次感谢楼上的兄弟们提出宝贵意见,

最后大家也show些自己的类把,哈哈
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics