一个分页标签,头疼好好久,写出来去大家共享
2008-11-14 14:45
369 查看
public class PageTag extends BodyTagSupport {
/** 每页显示的记录数(标签的属性) */
private int pageSize = 20;
/** 目的地(标签的属性) */
private String gotoURI;
/** 总记录数名 */
public static final String TOTAL = "total";
/** 当前页号名 */
public static final String PAGNENO = "pageNo";
/** 每页要显示的记录数名 */
public static final String RECORDCOUNT = "pageSize";
/** 目的地名 */
public static final String GOTOURI = "gotoURI";
//标签处理程序
public int doStartTag() throws JspException {
/** 当前页号(从请求对象中得到) */
int pageNo = 1;
/** 总记录数(从请求对象中得到) */
int total = 0;
/** 总页数(计算得出) */
int totalPage = 1;
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
// 要输出到页面的HTML文本
StringBuffer sb = new StringBuffer();
sb.append("/r/n<form method='post' action='' ").append(
"name='pageController'>/r/n");
// 获取所有提交的参数(包括查询条件参数)
Enumeration enumeration = request.getParameterNames();
String name = null;
String value = null;
while (enumeration.hasMoreElements()) {
name = (String) enumeration.nextElement();
value = request.getParameter(name);
if (name.equals(RECORDCOUNT)) {
continue;
}
// 从请求对象中获取要跳转到的页号
if (name.equals(PAGNENO)) {
if (null != value && !"".equals(value)) {
pageNo = Integer.parseInt(value);
}
continue;
}
sb.append("<input type='hidden' name='").append(name).append(
"' value='").append(value).append("'/>/r/n");
}
//把当前页号设置成请求参数
sb.append("<input type='hidden' name='").append(PAGNENO).append(
"' value='").append(pageNo).append("'/>/r/n");
// 从请求对象中获取总记录数
String tot = (String) request.getAttribute(TOTAL);
if (null != tot && !"".equals(tot)) {
total = Integer.parseInt(tot);
}
//计算总页数
totalPage = getTotalPage(total);
//System.out.println("total-->" + total);
sb.append("<table width='98%'>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td colspan='2'>/r/n");
sb.append(" <div style='font-size: 0;line-height: 0;width: 100%;margin: 0;clear: both;border-top: #cccccc 1px dashed'></div>/r/n");
sb.append(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td align='left'>/r/n");
sb.append(" /r/n");
sb.append(" 总 ").append(totalPage).append(" 页,当前第 ").append(pageNo)
.append(" 页/r/n");
sb.append(" </td>/r/n");
sb.append(" <td align='right'>/r/n");
if (pageNo == 1) {
sb.append(" 首页");
sb.append(" ");
sb.append("上一页/r/n");
} else {
sb.append(" <a href='#' onclick='turnOverPage(1)'>首页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(")
.append((pageNo - 1)).append(")'>上一页</a>/r/n");
}
sb.append(" ");
if (pageNo == totalPage) {
sb.append("下一页");
sb.append(" ");
sb.append("尾页/r/n");
} else {
sb.append(" <a href='#' onclick='turnOverPage(")
.append((pageNo + 1)).append(")'>下一页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(")
.append(totalPage).append(")'>尾页</a>/r/n");
}
sb.append(" 跳到 /r/n");
sb.append(" <select onChange='turnOverPage(this.value)'>/r/n");
for(int i = 1; i <= totalPage; i++){
if(i == pageNo){
sb.append(" <option value='").append(i).append("' selected>第")
.append(i).append("页</option>/r/n");
}else{
sb.append(" <option value='").append(i).append("'>第")
.append(i).append("页</option>/r/n");
}
}
sb.append(" </select>/r/n");
sb.append(" /r/n");
sb.append(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append("</table>/r/n");
sb.append("</form>/r/n");
// 生成提交表单的JS
sb.append("<script language='javascript'>/r/n");
sb.append(" function turnOverPage(no){/r/n");
sb.append(" var form = document.pageController;/r/n");
sb.append(" //页号越界处理/r/n");
sb.append(" if(no").append(">").append(totalPage).append(") {/r/n");
sb.append(" no=").append(totalPage).append(";/r/n");
sb.append(" }/r/n");
sb.append(" if(no").append("<=0){/r/n");
sb.append(" no=1;/r/n");
sb.append(" }/r/n");
sb.append(" form.").append(PAGNENO).append(".value=no;/r/n");
sb.append(" form.action='").append(gotoURI).append("';/r/n");
sb.append(" form.submit();/r/n");
sb.append(" }/r/n");
sb.append("</script>/r/n");
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
public String getGotoURI() {
return gotoURI;
}
public void setGotoURI(String gotoURI) {
this.gotoURI = gotoURI;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 根据总记录数得到总页数
*
* @return int 总页数
*/
private int getTotalPage(int total) {
int totalPage = 1;
if (total == 0) {
totalPage = 1;
} else {
totalPage = (total % pageSize == 0) ? (total / pageSize)
: (total / pageSize + 1);
}
return totalPage;
}
}
在写相关的tld文件,就可以在页面用了。
/** 每页显示的记录数(标签的属性) */
private int pageSize = 20;
/** 目的地(标签的属性) */
private String gotoURI;
/** 总记录数名 */
public static final String TOTAL = "total";
/** 当前页号名 */
public static final String PAGNENO = "pageNo";
/** 每页要显示的记录数名 */
public static final String RECORDCOUNT = "pageSize";
/** 目的地名 */
public static final String GOTOURI = "gotoURI";
//标签处理程序
public int doStartTag() throws JspException {
/** 当前页号(从请求对象中得到) */
int pageNo = 1;
/** 总记录数(从请求对象中得到) */
int total = 0;
/** 总页数(计算得出) */
int totalPage = 1;
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
// 要输出到页面的HTML文本
StringBuffer sb = new StringBuffer();
sb.append("/r/n<form method='post' action='' ").append(
"name='pageController'>/r/n");
// 获取所有提交的参数(包括查询条件参数)
Enumeration enumeration = request.getParameterNames();
String name = null;
String value = null;
while (enumeration.hasMoreElements()) {
name = (String) enumeration.nextElement();
value = request.getParameter(name);
if (name.equals(RECORDCOUNT)) {
continue;
}
// 从请求对象中获取要跳转到的页号
if (name.equals(PAGNENO)) {
if (null != value && !"".equals(value)) {
pageNo = Integer.parseInt(value);
}
continue;
}
sb.append("<input type='hidden' name='").append(name).append(
"' value='").append(value).append("'/>/r/n");
}
//把当前页号设置成请求参数
sb.append("<input type='hidden' name='").append(PAGNENO).append(
"' value='").append(pageNo).append("'/>/r/n");
// 从请求对象中获取总记录数
String tot = (String) request.getAttribute(TOTAL);
if (null != tot && !"".equals(tot)) {
total = Integer.parseInt(tot);
}
//计算总页数
totalPage = getTotalPage(total);
//System.out.println("total-->" + total);
sb.append("<table width='98%'>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td colspan='2'>/r/n");
sb.append(" <div style='font-size: 0;line-height: 0;width: 100%;margin: 0;clear: both;border-top: #cccccc 1px dashed'></div>/r/n");
sb.append(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td align='left'>/r/n");
sb.append(" /r/n");
sb.append(" 总 ").append(totalPage).append(" 页,当前第 ").append(pageNo)
.append(" 页/r/n");
sb.append(" </td>/r/n");
sb.append(" <td align='right'>/r/n");
if (pageNo == 1) {
sb.append(" 首页");
sb.append(" ");
sb.append("上一页/r/n");
} else {
sb.append(" <a href='#' onclick='turnOverPage(1)'>首页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(")
.append((pageNo - 1)).append(")'>上一页</a>/r/n");
}
sb.append(" ");
if (pageNo == totalPage) {
sb.append("下一页");
sb.append(" ");
sb.append("尾页/r/n");
} else {
sb.append(" <a href='#' onclick='turnOverPage(")
.append((pageNo + 1)).append(")'>下一页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(")
.append(totalPage).append(")'>尾页</a>/r/n");
}
sb.append(" 跳到 /r/n");
sb.append(" <select onChange='turnOverPage(this.value)'>/r/n");
for(int i = 1; i <= totalPage; i++){
if(i == pageNo){
sb.append(" <option value='").append(i).append("' selected>第")
.append(i).append("页</option>/r/n");
}else{
sb.append(" <option value='").append(i).append("'>第")
.append(i).append("页</option>/r/n");
}
}
sb.append(" </select>/r/n");
sb.append(" /r/n");
sb.append(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append("</table>/r/n");
sb.append("</form>/r/n");
// 生成提交表单的JS
sb.append("<script language='javascript'>/r/n");
sb.append(" function turnOverPage(no){/r/n");
sb.append(" var form = document.pageController;/r/n");
sb.append(" //页号越界处理/r/n");
sb.append(" if(no").append(">").append(totalPage).append(") {/r/n");
sb.append(" no=").append(totalPage).append(";/r/n");
sb.append(" }/r/n");
sb.append(" if(no").append("<=0){/r/n");
sb.append(" no=1;/r/n");
sb.append(" }/r/n");
sb.append(" form.").append(PAGNENO).append(".value=no;/r/n");
sb.append(" form.action='").append(gotoURI).append("';/r/n");
sb.append(" form.submit();/r/n");
sb.append(" }/r/n");
sb.append("</script>/r/n");
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
public String getGotoURI() {
return gotoURI;
}
public void setGotoURI(String gotoURI) {
this.gotoURI = gotoURI;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 根据总记录数得到总页数
*
* @return int 总页数
*/
private int getTotalPage(int total) {
int totalPage = 1;
if (total == 0) {
totalPage = 1;
} else {
totalPage = (total % pageSize == 0) ? (total / pageSize)
: (total / pageSize + 1);
}
return totalPage;
}
}
在写相关的tld文件,就可以在页面用了。
相关文章推荐
- Spring+Hibernate+Struts技术的一个分页程序,共享给大家
- Spring+Hibernate+Struts技术的一个分页程序,共享给大家
- 一个相当好的自定义标签---分页(二)
- 一个兼容IE和FF的下拉菜单,和大家共享。
- 很久以前写的一个很简单连连看,贴出来给大家看下
- 我的收藏精品[把它共享出来,相信对大家有点用,毕竟是长时间收藏的](4)
- 教大家怎么把百度网盘的分享链接共享出来
- 好久没有写blog了,可写的东西还是很多的,慢慢的写出来吧,与大家一起共同学习
- 看了GAL游戏资源文件黑盒分析,想起以前做的一个提取器,发来大家共享一下
- 刚发现了一个问题,关于vs2005 datagridview的,我发现在设计行标头的HeaderCell.Value的时候要是设置RowTemplate.Height 的值>= 17则行标头的那个黑三角就显示出来了,要是小于17就不能显示了,想问问大家,是怎么回事?
- 怒...!CSDN 应该出来给大家一个说法了!
- 推荐大家一个好用的实现分页加载和下拉刷新Android工具包
- 一个OOP的课程设计,不难实现,贴出来请大家指正。
- 今天用到正则表达式爽来php正则 与 js正则全都找了点列出来大家共享
- (转找了好久)实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
- ExtJs中文文档下载,今天在网上找到了ExtJs的中文翻译的,我把它编译成了一个电子书,在这里共享给大家
- 共享一个JS分页处理的类(3)
- jsp标签相关问题;推荐大家一个霸气的标签fn
- 自己写的年会抽奖软件免费版带后门作弊,共享出来给大家(更新至V1.3)——转自哈尔滨健康生活网
- 以前写的一个分页存储过程,刚才不小心翻出来的