- 浏览: 299757 次
文章分类
最新评论
-
流年末年:
那四个参数还是没看懂.....能不能解释下showPassst ...
我写的密码强度验证方法(原创) -
kingcs2008:
// 验证pws.jsshowPassstrength(&qu ...
我写的密码强度验证方法(原创) -
h957355152:
请问博主这个怎么用呢?我直接放到jsp里面调用showPass ...
我写的密码强度验证方法(原创) -
qq_15138059:
我写的全国省市县三级联动菜单,拿出来和大家分享了(原创) -
valenon:
评论呢?从MAIL FROM命令开始貌似就出错了:500 Er ...
如何发送伪造的电子邮件
java组件
标签配置文件,放在 /WebRoot/WEB-INF/ 下,命名为struts-extend.tld
模板文件,放在 src/template/当前struts2主题/ 目录下,我的是放在 src/template/simple/ 下面。命名为pagebar_basic.ftl,还可以自己写其他的主题来扩展这个分页标签,比如写一个pagebar_ajax.ftl使它支持ajax方式的分页。
在JSP中引用这个标签,其中pageNo是分页参数的名字,pageSize是每页显示的条目数量,totalRecord是总记录数,这些参数是从action传过来的。另外还接受一个可选的参数style,这个参数用来指出使用哪个模板,style缺省时会使用pagebar_basic.ftl这个模板。
缺点和不足:
点击跳页功能存在不足,当一个页面有多个分页工具条时候,可能会出问题。
package com.tag; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.UIBean; import com.opensymphony.xwork2.util.ValueStack; public class Pagebar extends UIBean { protected String totalRecord; protected String pageSize; protected String pageNo; protected String url; protected String style; public String getTotalRecord() { return totalRecord; } public void setTotalRecord(String totalRecord) { this.totalRecord = totalRecord; } public String getPageSize() { return pageSize; } public void setPageSize(String pageSize) { this.pageSize = pageSize; } public String getPageNo() { return pageNo; } public void setPageNo(String pageNo) { this.pageNo = pageNo; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } public Pagebar(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); } @Override protected String getDefaultTemplate() { return "pagebar_" + style.toLowerCase(); } @Override protected void evaluateExtraParams() { super.evaluateExtraParams(); addParameter("totalRecord", findString(totalRecord)); addParameter("pageSize", findString(pageSize)); // 保证页码必须为数字,防止无效参数 String pno = findString(pageNo); if (pno == null || !pno.matches("^[1-9]+[0-9]*$")) pno = "0"; addParameter("pageNo", pno); addParameter("url", findString(url)); addParameter("style", style); } }
package com.tag; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.components.Component; import org.apache.struts2.views.jsp.ui.AbstractUITag; import com.opensymphony.xwork2.util.ValueStack; public class PagebarTag extends AbstractUITag { private static final long serialVersionUID = 1L; protected String totalRecord; protected String pageSize; protected String pageNo; protected String url; protected String style = "basic"; @Override public Component getBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { return new Pagebar(stack, request, response); } protected void populateParams() { super.populateParams(); Pagebar pagebar = (Pagebar) component; pagebar.setTotalRecord(totalRecord); pagebar.setPageSize(pageSize); pagebar.setPageNo(pageNo); pagebar.setUrl(url); pagebar.setStyle(style); } public String getTotalRecord() { return totalRecord; } public void setTotalRecord(String totalRecord) { this.totalRecord = totalRecord; } public String getPageSize() { return pageSize; } public void setPageSize(String pageSize) { this.pageSize = pageSize; } public String getPageNo() { return pageNo; } public void setPageNo(String pageNo) { this.pageNo = pageNo; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } }
标签配置文件,放在 /WebRoot/WEB-INF/ 下,命名为struts-extend.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>l</short-name> <uri>/lowca-tags</uri> <display-name>自定义的struts标签</display-name> <tag> <name>pagebar</name> <tag-class>com.tag.PagebarTag</tag-class> <body-content>jsp</body-content> <description>分页工具条</description> <attribute> <name>totalRecord</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>int</type> <description>记录数</description> </attribute> <attribute> <name>pageSize</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>int</type> <description>每页显示的条数</description> </attribute> <attribute> <name>pageNo</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>int</type> <description>页码</description> </attribute> <attribute> <name>url</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description>url地址</description> </attribute> <attribute> <name>style</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <type>java.lang.String</type> <description>呈现样式</description> </attribute> </tag> </taglib>
模板文件,放在 src/template/当前struts2主题/ 目录下,我的是放在 src/template/simple/ 下面。命名为pagebar_basic.ftl,还可以自己写其他的主题来扩展这个分页标签,比如写一个pagebar_ajax.ftl使它支持ajax方式的分页。
<#-- 定义顶层变量并转换 --> <#assign url=parameters.url /> <#assign pageSize=parameters.pageSize?number /> <#assign totalRecord=parameters.totalRecord?number /> <#if (totalRecord%pageSize=0)> <#assign totalPage=totalRecord/pageSize /> <#else> <#assign totalPage=totalRecord/pageSize+1 /> </#if> <#assign pageNo=parameters.pageNo?number /> <#if (pageNo<1)> <#assign pageNo=1 /> </#if> <#if (pageNo>totalPage)> <#assign pageNo=totalPage /> </#if> <#-- 模板逻辑 --> <#if (totalRecord>0) && (totalPage>1) && (pageNo>0) && (pageNo<=totalPage)> <#--计算开始位置和结束位置--> <#if (pageNo<=5)> <#assign leftNo=1 /> <#if (totalPage<10)> <#assign rightNo=totalPage /> <#else> <#assign rightNo=10 /> </#if> <#elseif (pageNo>5) && (pageNo<=totalPage-5)> <#if (pageNo-4>0)> <#assign leftNo=pageNo-4 /> <#else> <#assign leftNo=1 /> </#if> <#if (pageNo+5<=totalPage)> <#assign rightNo=pageNo+5 /> <#else> <#assign rightNo=totalPage /> </#if> <#else> <#if (totalPage-10+1>0)> <#assign leftNo=totalPage-10+1 /> <#else> <#assign leftNo=1 /> </#if> <#assign rightNo=totalPage /> </#if> <#--输出内容--> <#lt/><!--================分页工具条开始================--> <style> /*page*/ .pagebar_warpper li { display:inline; margin:0 1px; left center no-repeat;} .pagebar_warpper{ width:auto; margin:0 auto; height:22px; line-height:22px; text-align:center; margin-top:20px;} .pagebar_desc,.pagebar_plist,.pagebar_gp{ float:left;} .pagebar_plist a{ border:1px solid #ccc; padding:5px; margin-right:3px; background:#fff; text-decoration:none;} .pagebar_plist a.pagebar_curr{ background:#72b003; color:#fff; border:1px solid #72b003;} .green{ font-weight:bold; margin-right:5px; color:#75bf0d;} .pagebar_gp_textbox{ width:30px; height:18px; border:1px solid #ccc; margin-right:1px;} .pagebar_gp_button{ background-color:#75bf0d; color:#fff; padding:2px; text-align:center; cursor:pointer; font-weight:bold;} </style> <div class="pagebar_warpper"> <ul class="pagebar_ul"> <li class="pagebar_desc">总条数<span class="pagebar_desc_num">${totalRecord?c}</span> 总页数<span class="pagebar_desc_num">${totalPage?c}</span></li> <li class="pagebar_plist"> <a href="<@getURL text=url page=1 />">首页</a> <#if (pageNo-1>=1)> <a href="<@getURL text=url page=pageNo-1 />">上一页</a> </#if> <#list leftNo..rightNo as p> <#if (p==pageNo)> <a class="pagebar_curr" href="#">${p}</a> <#else> <a href="<@getURL text=url page=p />">${p}</a> </#if> </#list> <#if (pageNo+1<=totalPage)> <a href="<@getURL text=url page=pageNo+1 />">下一页</a> </#if> <a href="<@getURL text=url page=totalPage />">尾页</a> </li> <li class="pagebar_gp"><input type="text" value="" class="pagebar_gp_textbox" /><input type="button" value="go" class="pagebar_gp_button" onclick="pagebar_gotoPage(this)"/></li> </ul> </div> <script type="text/javascript"> function pagebar_gotoPage(btn) { if(!btn || !btn.previousSibling) return; var pno = btn.previousSibling.value; if(!pno || !/^[1-9]+[0-9]*$/.test(pno)) pno = 1; else pno = parseInt(pno); if(pno>${totalPage}) pno = ${totalPage}; var currUrl = window.location.href; if(!currUrl) return; var pos = currUrl.indexOf("?"); if(pos<=0) { var forwardUrl = currUrl+"?pageNo="+pno; window.location.href = forwardUrl; return; } var params = currUrl.substring(pos+1); var realUrl = currUrl.substring(0,pos); var paramArray = params.split("&"); for(var i=0;i<paramArray.length;i++) { if(/^pageNo=.*$/i.test(paramArray[i])) { paramArray[i] = "pageNo="+pno; break; } } window.location.href = realUrl+"?"+paramArray.join("&"); } </script> <!--================分页工具条结束================--><#rt/> </#if> <#--产生动态URL的宏--> <#macro getURL text page> <#if (text?index_of("?")>0)> <#lt/>${text?replace("?","?pageNo="+page)}<#rt/> <#else> <#lt/>${text}?pageNo=${page}<#rt/> </#if> </#macro>
在JSP中引用这个标签,其中pageNo是分页参数的名字,pageSize是每页显示的条目数量,totalRecord是总记录数,这些参数是从action传过来的。另外还接受一个可选的参数style,这个参数用来指出使用哪个模板,style缺省时会使用pagebar_basic.ftl这个模板。
<%@ page language="java" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="l" uri="/lowca-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE-EmulateIE7" /> <title>分页工具条模板</title> </head> <body> <l:pagebar pageNo="${param.pageNo}" url="${webroot }/test.jsp" pageSize="10" totalRecord="4000"></l:pagebar> </body> </html>
缺点和不足:
点击跳页功能存在不足,当一个页面有多个分页工具条时候,可能会出问题。
发表评论
-
全国学校和地区数据库
2012-04-08 03:14 2618全国学校和地区数据库 -
提升struts2的性能
2012-03-30 14:39 761freemarker 升级为2.3.14 og ... -
JAVA项目之SSH编码规范
2012-03-26 00:19 927编码规范目的:风格统 ... -
浅谈千万级PV/IP规模高性能高并发网站架构
2012-03-21 23:42 1282浅谈千万级PV/IP 规模高性能高并发网站架构 ... -
myeclipse中项目上面有红叉如何解决?
2012-03-06 13:50 6558项目中没有错误,却发现有一个红叉,怎么都消不掉,这是为什么呢? ... -
基于Compass2.2与Spring 结合建立索引的实例
2012-03-03 19:55 1089本实例建立在ssh ... -
数据库表设计的基本原则
2012-03-02 08:47 9251.动态数据和静态数据分离,比如统计作用的列comment_c ... -
struts1.x、struts2.x和springmvc浅析(转载)
2012-02-27 09:59 986入住javaeye也要1年半了,第一次给自己的blog丰富点. ... -
testsaslauthd报 0: NO "authentication failed" 的问题
2012-02-17 00:39 4728输入 ./testsaslauthd -u userID -p ... -
CentOS5.3+Nginx0.7.57+Postfix+Extmail邮件系统安装配置
2012-02-17 00:37 976、 ... -
中外伟人观之对比,架构
2012-02-16 20:59 397世界上每一个国家都有他们的伟人,但各国的伟人观却不 ... -
postfix用到的包
2012-02-16 15:20 760The Postfix RPM I produce use ... -
通过Telnet来发送邮件
2012-02-16 10:28 940有些时候我们通过写代码来发送邮件. 有些时候, 代码可以正 ... -
sendmail发件人显示为xxx@localhost.localdomain的解决办法
2012-02-15 22:07 5118大 | 中 | 小 1 ... -
架构演进-实例篇(转载)
2012-02-05 18:03 7811引言 在标题的取名上,不敢说颇费心机,也算得上花 ... -
消息提示的架构演进-理论篇(转载)
2012-02-05 18:02 694项目是一个互联网 ... -
通告(公告),消息(站内短信),提醒的设计<一>:通告(转载)
2012-02-05 18:00 13231 业务描述 首先我们 ...
相关推荐
Struts2自定义分页标签很详细了,新手可以少走弯路,节约时间 资源包括了后台如何操作。
用Struts2+mysql实现的简单信息录入,分页查询
struts1.2实现分页,希望能帮助大家
使用jsp+struts2实现前台分页技术
struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页struts分页
struts2增删改查,struts2分页查询
struts2实现分页显示 struts2实现分页显示
struts2中<s:bean name="org.apache.struts2.util.Counter" id="counter">循环标签的使用
STRUTS2+HIBERNATE分页 实现代码详细的分页实现代码实现代码详细的分页实现代码实现代码详细的分页实现代码实现代码详细的分页实现代码
下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...
jquery java struts2 实现分页 非常好看 可自定义修改样式
基于struts2的自定义分页标签实现的一个demo,连接数据库为Oracle
Struts分页Struts分页Struts分页Struts分页Struts分页Struts分页Struts分页Struts分页
Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序Struts2分页程序
struts2分页效果第二种struts2分页效果第二种
该文档详细描述了struts2版本的分页显示,值得一读
struts2 jquery 分页
Struts分页.这里帮忙讲述了Struts分页.分页 然后对比其他java分页的话更为简单
一个简单的hibernate+struts2分页功能 希望对你有所帮助