第一范文网 - 专业文章范例文档资料分享平台

Struts2自定义分页标签

来源:用户分享 时间:2025/8/10 0:43:29 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

最近在学习Struts2,并使用Struts2开发系统。在网上看了好多的struts2的分页,虽然都实现了分页的功能,但是感觉不是非常好,需要我们在每次写分页的时候做很多的工作,而我认为分页应该是一个通用的组件,开发人员在开发的过程中不应该在分页上花费太多的精力。所以,一直想封装一个比较通用的分页组件,而设计分页组件的时候,怎样保证动态查询的参数不丢失,成为实现的一个难点。感谢tangshuo和shim的分享,让我实现了这样的一个分页组件。 该组件采用自定struts2标签的方式实现。

首先建立一个构建分页标签信息的类:Pages.java

/**

*构建分页标签体的类

*@authorJava软件工程师,专注于java领域新技术的研究和系统设计。 *@date2008-11-4下午02:52:19 *@version1.0 */

publicclass Pages extends Component { private HttpServletRequest request; private String pageNo; //当前页码 private String total; //总页数

private String styleClass; //分页的样式 private String theme; //分页的主题 private String url; //action的路径

private String urlType; //路径的类型,主要用于URL重写的扩展

//省略get、set方法

public Pages(ValueStack arg0, HttpServletRequest request) { super(arg0);

this.request = request; }

@Override

publicboolean end(Writer writer,String body) { boolean result = super.start(writer); try {

//从ValueStack中取出数值

Object obj=this.getStack().findValue(pageNo); pageNo = String.valueOf((Integer)obj); obj=this.getStack().findValue(total); total = String.valueOf((Integer)obj);

StringBuilder str = new StringBuilder(); Map cont= this.getStack().getContext(); StrutsRequestWrapper

req=(StrutsRequestWrapper)cont.get(StrutsStatics.HTTP_REQUEST);

if(url==null||\.equals(url)){

url=(String)req.getAttribute(\); }

String pageNoStr=\;

if(\.equals(urlType)){//当url的类型为目录类型时,比如http://localhost:8090/yongtree/page/1 pageNoStr=\;

if(\.equals(pageNo)){//第一页时 if(url.lastIndexOf(\)!=url.length()-1){

if(url.lastIndexOf(\)==url.length()-1){//如果有页码1,则去掉1 url=url.substring(0, url.length()-1);

}elseif(url.lastIndexOf(\)!=url.length()-1){//如果没有页码1,并且最后不是'/'时,加上'/'

url=url+\; } } }else{

url=url.substring(0, url.lastIndexOf(\)+1); } }

//下面这段处理主要是用来处理动态查询的参数,并拼接成url StringBuffer perUrl=new StringBuffer(\); if ( this.getParameters().size() != 0 ) {

Iterator iter = this.getParameters().keySet().iterator(); while (iter.hasNext()) {

String key = (String) iter.next();

Object o = this.getParameters().get(key);

perUrl.append(\).append(key).append(\).append(o); } }

Integer cpageInt = Integer.valueOf(pageNo); str.append(\); if (styleClass != null) {

str.append(\+styleClass+\); } else {

str.append(\); }

//文本样式

if (theme == null || \.equals(theme)) { //当前页与总页数相等 if (pageNo.equals(total)) {

//如果total = 1,则无需分页,显示“[第1页] [共1页]” if (\.equals(total)) {

str.append(\第 \ + pageNo + \页]\); str.append(\共 \ + total + \页]\); } else {

//到达最后一页,显示“[首页] [上一页] [末页]”

str.append(\+url+pageNoStr+\+perUrl+\首页] \); str.append(\+url+pageNoStr + (cpageInt - 1)+perUrl+\上一页]\ );

str.append(\+url+pageNoStr + total+perUrl+\末页] \); } } else {

//当前页与总页数不相同 if (\.equals(pageNo)) {

//第一页,显示“[首页] [下一页] [末页]”

str.append(\+url+pageNoStr+\+perUrl+\首页]\); str.append(\+url+pageNoStr + (cpageInt + 1) +perUrl+\下一页]\);

str.append(\+url+pageNoStr + total +perUrl+\末页]\); } else {

//不是第一页,显示“[首页] [上一页] [下一页] [末页]”

str.append(\+url+pageNoStr+\+perUrl+\首页]\); str.append(\+url+pageNoStr + (cpageInt - 1)+perUrl+\上一页]\);

str.append(\+url+pageNoStr + (cpageInt + 1)+perUrl+\下一页]\);

str.append(\+url+pageNoStr + total +perUrl+\末页]\); } }

} elseif (\.equals(theme)) { //数字样式 [1 2 3 4 5 6 7 8 9 10 > >>] Integer totalInt = Integer.valueOf(total);

//如果只有一页,则无需分页 str.append(\); if (totalInt == 1) {

str.append(\); } else { if (cpageInt > 1) {

//当前不是第一组,要显示“<< <” //<<:返回前一组第一页 //<:返回前一页

str.append(\+url+pageNoStr+\+perUrl+\); str.append(\+url+pageNoStr + (cpageInt - 1)+perUrl); str.append(\ );

}else{ str.append(\ ); }

int v=(cpageInt-4)>0?(cpageInt-4):1;

int v1=(cpageInt+4)

v=(v<=0?1:v); //如果为负数,则修改为1 }elseif(v==1&&v110?10:totalInt; }

//10个为一组显示 for (int i = v; i <= v1; i++) {

if (cpageInt == i) { //当前页要加粗显示

str.append(\+i+\); }else{

//str.append(\

str.append(\+url+pageNoStr + i +perUrl+\ + i + \); } }

//如果多于1组并且不是最后一组,显示“> >>” if (cpageInt>:返回下一组最后一页 //>:返回下一页

str.append(\+url+pageNoStr + (cpageInt + 1)+perUrl); str.append(\ );

str.append(\+url+pageNoStr + totalInt+perUrl); str.append(\ ); }else{

str.append(\ ); } }

str.append(\); }

str.append(\);

writer.write(str.toString());

} catch (IOException ex) { ex.printStackTrace(); }

return result; }

搜索更多关于: Struts2自定义分页标签 的文档
Struts2自定义分页标签.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4ygro2f5026bod04q6wc_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top