- 浏览: 11996 次
- 来自: ...
最新评论
-
magician007:
刚刚接触tapestry,觉得很多东西的实现上很别扭,正在纠结 ...
Struts2/webwork与tapestry的区别(二) -
andilyliao:
天津也这样 还不如深圳了 天津程序员更廉价 但是房子同样天价 ...
如果有下辈子绝对不会当程序员 -
liuwenbo200285:
这个速度是快还是慢啊,感觉速度可以了。
Mysql 5.0 hibernate 五百万数据查询 -
downpour:
引用 tapestry支持多个properties文件 w ...
Struts2/webwork与tapestry的区别(二)
在每次使用struts2/webwork中使用分页的时候都感觉特别麻烦,主要是标签写太多又复杂,于是就想能不能通过自定义标签进行分装分页呢?如,只需要在JSP界面上写<分页></分页>这样就ok了
具体实现如下:
1 :在需要分页的jsp界面 写下标签
<app:pagerequest action="buycompany" css_class_name="page"
next="next" nextName="<fmt:message key="nextPage"/>"
last="last" lastName="<fmt:message key="lastPage"/>" " currentPage="currentPage"
currentPageName="第" currentPageValue="${current}"
allPageName="总共" allSize="${allPage}" allSizeName="pageSize"
jump="第" page="页"/>
最终显示如图
1),<app: 是自己自定标签 就是下面加载标签的 prefix="app"
2), pagerequest: 分页自定义功能对应tag name
3),action="buycompany" :分页提交查看的对应分页action
2 :在jsp中加载标签
<%@ taglib uri="/WEB-INF/app.tld" prefix="app" %>
这个一般我是写在tagsupport.jsp里面
具体如下
<%@ page language="java" errorPage="/error.jsp"
pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page"%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%@ taglib uri="/WEB-INF/app.tld" prefix="app" %>
所以在所有的jsp中include该tagsupport.jsp就可以了
3:WEB-INF/建立app.tld
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>app</short-name>
<tag>
<name>pagerequest</name>
<tag-class>com.。。。。。.taglib.PageRequestTag</tag-class>
<attribute>
<name>action</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>next</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>last</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>currentPageName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>currentPage</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>currentPageValue</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>allSize</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>allSizeName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>lastName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>nextName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>css_class_name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>allPageName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>jump</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>page</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
1)com.。。。。。taglib.PageRequestTag 就是我们自己写的自定义标签 其内容如下面第四部所讲
4:在自己的一个包中写入PageRequestTag.java
具体内容如下:
package com.sky.taglib;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
*分页自定义标签
* author:haiwoo
*/
public class PageRequestTag extends TagSupport {
/**
*
*/
private static final long serialVersionUID = -3210838227548318578L;
//查看看分页的action
private String action;
//下一页 主要是写在li的id值
private String next;
//上一页 主要是写在li的id值
private String last;
private String currentPage;
//当前页
private String currentPageName;
//但前页的值
private String currentPageValue;
//上一页的名称:中文 =上一页 英文=lastPage
private String lastName;
//上一页的名称:中文 =下一页 英文=nextPage
private String nextName;
private String allSize;
private String allSizeName;
//分页的样式
private String css_class_name;
private String jump;
private String page;
private String allPageName;
public void setAction(String action) {
this.action = action;
}
public void setAllSize(String allSize) {
this.allSize = allSize;
}
public void setCss_class_name(String css_class_name) {
this.css_class_name = css_class_name;
}
public void setLast(String last) {
this.last = last;
}
public void setNext(String next) {
this.next = next;
}
public void setJump(String jump) {
this.jump = jump;
}
public void setPage(String page) {
this.page = page;
}
public void setAllSizeName(String allSizeName) {
this.allSizeName = allSizeName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setNextName(String nextName) {
this.nextName = nextName;
}
public void setCurrentPage(String currentPage) {
this.currentPage = currentPage;
}
public void setAllPageName(String allPageName) {
this.allPageName = allPageName;
}
public void setCurrentPageName(String currentPageName) {
this.currentPageName = currentPageName;
}
public void setCurrentPageValue(String currentPageValue) {
this.currentPageValue = currentPageValue;
}
@Override
public int doStartTag() throws JspException {
StringBuffer sb = new StringBuffer();
int current=Integer.valueOf(currentPageValue);
int lastPage=0;
int nextPage=0;
int allPage=Integer.valueOf(allSize);
if(allPage<1)allPage=1;
if(current>1)lastPage=current-1;
else lastPage=1;
if(current<allPage)nextPage=current+1;
else nextPage=current;
sb.append("<input type=\"hidden\" name=\"" + next + "\" id=\"" + next + "\" value=\""+nextPage+"\">\n");
sb.append("<input type=\"hidden\" name=\"" + last + "\" id=\"" + last + "\" value=\""+lastPage+"\">\n");
sb.append("<ul class=\""+css_class_name+"\">");
// 上一页
sb.append("<li><a href=\"#\"" +
" onclick=\"javascript:document.getElementById(\'"+currentPage+"\').value=document.getElementById(\'"+last+"\').value," +
"document.getElementById(\'"+action+"\').submit()\" >"+
lastName+"</a></li>");
//当前第几页
sb.append("<li>"+currentPageName+current+page+"</li>");
// 下一页
sb.append("<li><a href=\"#\"" +
" onclick=\"javascript:document.getElementById(\'"+currentPage+"\').value=document.getElementById(\'"+next+"\').value," +
"document.getElementById(\'"+action+"\').submit()\" >"+
nextName+"</a></li>");
// 调转到第几页
sb.append("<li>"+jump+"<select name=\"" +
allSizeName + "\" id=\"" + allSizeName +
"\" " +
"onchange=\"javascript:document.getElementById(\'"+currentPage+"\').value=this.value," +
"document.getElementById(\'"+action+"\').submit()\""+
"class=\"select\">\n");
if("0".equals(allSize)||allSize==null||"".equals(allSize)){
sb.append(" <option value=\"0\"");
sb.append(">0</option>\n");
}else{
for(int i=1;i<=allPage;i++){
sb.append("<option value=\""+i+"\"");
sb.append(">"+i+"</option>\n");
}
}
sb.append("</select></li>"+page);
// 总共多少页
sb.append("<li>"+allPageName+allPage+page+"</li>");
sb.append("</ul>");
try {
pageContext.getOut().write(sb.toString());
} catch (IOException io) {
throw new JspException(io);
}
return super.doStartTag();
}
@Override
public void release() {
super.release();
}
}
5:在action中查询分页
//查询总共多少页
int size=manager.getObjectCount( );
allPage=(size+Constants.Page_MaxLength_Size)/Constants.Page_MaxLength_Size;
// 查询第几页
int start=(currentPage-1)*Constants.Page_MaxLength_Size-1;
if(start<0)start=0;
//这是查询结果
list=manager.getlist(start, Constants.Page_MaxLength_Size);
1) allPage 在action 中定义 我是在baseAction中定义的
/**
* 当前页 默认为第一页开始
*/
protected Integer currentPage=Integer.valueOf(1);
/**
* 总共多少页 默认只有一页
*/
protected Integer allPage=Integer.valueOf(1);
并有相应的setter与getter
2) Constants.Page_MaxLength_Size 一页显示多少条记录 这是静态final变量
总结:
好的一方面
根据上面的结果 只要我想要的分页的地方只要写下如下俩个地方
jsp:
<app:pagerequest action="buycompany" css_class_name="page"
next="next" nextName="<fmt:message key="nextPage"/>"
last="last" lastName="<fmt:message key="lastPage"/>" " currentPage="currentPage"
currentPageName="第" currentPageValue="${current}"
allPageName="总共" allSize="${allPage}" allSizeName="pageSize"
jump="第" page="页"/>
action:
//查询总共多少页
int size=manager.getObjectCount( );
allPage=(size+Constants.Page_MaxLength_Size)/Constants.Page_MaxLength_Size;
// 查询第几页
int start=(currentPage-1)*Constants.Page_MaxLength_Size-1;
if(start<0)start=0;
//这是查询结果
list=manager.getlist(start, Constants.Page_MaxLength_Size);
不好的地方
1:Constants.Page_MaxLength_Size 一页显示多少条记录 修改不方便 :可以改进为从界面传递下去
2:没有跟ajax进行结合 每次查看分页都刷新了整个界面: 改进成ajax方式提交
发表评论
-
以产品化开发的企业一直在自掘坟墓
2010-05-30 15:04 0随之扩招及培训机构,使得编程已经是纯粹的软件生产 ... -
你越软弱,别人越欺负你
2010-04-22 22:16 0你越软弱,别人越欺负你 或许很多人都很容易体会得到, ... -
如果有下辈子绝对不会当程序员
2009-11-15 22:06 1203如果有下辈子绝对不会当程序员 不是说不喜欢编成,但人总要吃饭 ... -
AOP(observable) aop的轮子,访问者结合代理模式的应用
2009-11-03 13:38 1483在Web系统中,经常用到session,然后再session的 ... -
Mysql 5.0 hibernate 五百万数据查询
2009-03-27 01:42 1514(support.XmlWebApplicationConte ... -
最近好迷茫
2009-03-21 15:19 9691 第一次接触java是在上大学三年级,我也不知道为什么要选择 ... -
Struts2/webwork与tapestry的区别(二)
2009-02-04 20:23 2027五、从国际化管理角度来说 tapestry支持多个pro ... -
Struts2/webwork与tapestry的区别(一)
2009-02-04 19:30 1280用了webwork1.5年时间,也用了tapestry1年的时 ... -
各国皇帝号召武将大臣们进行练武表演
2008-12-13 23:57 888各国皇帝号召武将大臣们进行练武表演,一个皇帝就是太监侍候 ...
相关推荐
struts2与webwork2之间的联系与区别
struts2对webwork的改进struts2对webwork的改进
WEB2.0相关技术,深入浅出Struts2,Webwork2开发指南,DWR中文文档
struts1,struts2,webwork,线程安全问题,easy518网 http://www.easy518.com/
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
struts2的教程,struts2整合了struts1+webwork.基于MVC的Framework struts2的教程,struts2整合了struts1+webwork.基于MVC的Framework
struts2+webwork+spring.rarstruts2+webwork+spring.rar
分页 webwork servlet 分页技术 jsp 框架结合的分页
不用多说了,Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版),解压出来有200多M,因为权限不怎么够,我一共分了12卷,是一本不可多得的好书。第一卷附目录: 第1章 Struts 2概述,第2章 Struts 2下的Hello...
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品
Struts 2 技术详解:基于WebWork核心的MVC开发与实践
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
Struts 2中文参考手册,Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,...
或者说,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,因此,是一...
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
是学习struts 2很好的资料,这是原代码,分成两个压缩包.
Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理...
Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...
Struts 2 began as WebWork.