由于在使用struts2中经常碰到分页的场景,因此这里讲述一个如何使用通用jsp分页组件的界面,其中包括可使用代码和相应的原理。
这个组件写于5年前,不过现在还是可以使用的,简而言之,它使用了struts2中标签的url标签。简单介绍一下url标签的作用,附如下所示:
名称 | 必填 | 缺省 | 类型 | 描述 |
value | false | Object/String | value如果不提供就用当前action | |
action | false | Object/String | 用来生成url的action,如果没有则使用value | |
namespace | false | Object/String | 命名空间 | |
id | false | Object/String | 该元素标识 |
仔细看url的介绍,其中有几个值值得注意,一是action及namespace和value值,如果不传就使用当前界面的请求值;另一个则是param属性,如果不写就使用当前界面的所有参数值,如果写了,就将设置了的进行覆盖。这里我们将这两个特性应用到我们的分页当中,就会发现这实际上就是专门为分页准备的,分页中,只需要变化分页参数,其它一切不变。
通过上面我们可以看出其中一个关键的参数,id值,文档上为如果id值不为null,而将相应的路径信息传递给id值,并将id值保存在上下文中。那么,我们在分页组件中就可以先定义这个id值,即某一页的链接,然后再将这个链接值传递到某一个a链接即可。
具体在实现上,我们肯定需要一个page对象,里面的属性大家都懂的,第几页,一页多少条,总记录数,然后就是根据这些参数处理是否有上一页,是否有下一页等。
那么,正式的代码即可如下所示,即如何输出首页:
<s:url id="goto"><s:param name="page.currentPage" value="1"/></s:url> <s:a href="%{goto}" title="首页"></s:a>
如何输出中间的页码数,这里采用的输出方式是以6条为界,即始终界面1-6,7-12这种记录数,当然,都是可定制的。如下所示:
<s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="%{page.currentPage % 6 == 0 ? page.currentPage - 5 : page.currentPage / 6 * 6 + 1}"/> <s:param name="last" value="%{page.currentPage % 6 == 0 ? page.currentPage : (page.currentPage / 6 * 6 + 6) < page.totalPage ? (page.currentPage / 6 * 6 + 6) : page.totalPage}"/> </s:bean> <s:iterator value="#counter"> <s:url id="goto"><s:param name="page.currentPage" value="top"/></s:url> <s:if test="top == page.currentPage"><a class="cur"><span><s:property/></span></a></s:if> <s:else><s:a href="%{goto}"><span><s:property/></span></s:a></s:else> </s:iterator>
其实都是很简单的,只需要处理好界面数,保存当前页没有链接而其它页有链接即可以了。
最后,附:整个jsp代码:开箱即用,直接在需要的地方 <%@ include url="page.jsp" %>即可。
<!-- Created by Fly_m at 2008-5-16 --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="s" uri="/struts-tags" %> <!-- 分页组件 --> <s:if test="page.hasPreviousPage || page.hasNextPage"> <div class="turnpage"> <%-- 开头两个 --%> <s:url id="goto"><s:param name="page.currentPage" value="1"/></s:url> <s:a href="%{goto}" title="首页"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></s:a> <s:if test="page.hasPreviousPage"> <s:url id="goto"> <s:param name="page.currentPage" value="%{page.currentPage - 1}"/> </s:url> </s:if> <s:a href="%{goto}" title="上一页"><span class="ui-icon ui-icon-triangle-1-w"></span></s:a> <%-- 页面显示 --%> <s:if test="page.totalPage <= 6"> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="1"/> <s:param name="last" value="page.totalPage"/> </s:bean> <s:iterator value="#counter"> <s:url id="goto"><s:param name="page.currentPage" value="top"/></s:url> <s:if test="top == page.currentPage"><a class="cur"><span><s:property/></span></a></s:if> <s:else><s:a href="%{goto}"><span><s:property/></span></s:a></s:else> </s:iterator> </s:if> <s:else> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="%{page.currentPage % 6 == 0 ? page.currentPage - 5 : page.currentPage / 6 * 6 + 1}"/> <s:param name="last" value="%{page.currentPage % 6 == 0 ? page.currentPage : (page.currentPage / 6 * 6 + 6) < page.totalPage ? (page.currentPage / 6 * 6 + 6) : page.totalPage}"/> </s:bean> <s:iterator value="#counter"> <s:url id="goto"><s:param name="page.currentPage" value="top"/></s:url> <s:if test="top == page.currentPage"><a class="cur"><span><s:property/></span></a></s:if> <s:else><s:a href="%{goto}"><span><s:property/></span></s:a></s:else> </s:iterator> </s:else> <%-- 结尾两个 --%> <s:url id="goto"><s:param name="page.currentPage" value="page.totalPage"/></s:url> <s:if test="page.hasNextPage"> <s:url id="goto"><s:param name="page.currentPage" value="%{page.currentPage + 1}"/></s:url> </s:if> <s:a href="%{goto}" title="下一页"><span class="ui-icon ui-icon-triangle-1-e"></span></s:a> <s:url id="goto"><s:param name="page.currentPage" value="page.totalPage"/></s:url> <s:a href="%{goto}" title="尾页"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></s:a> 页次:<s:property value="page.currentPage"/>/<s:property value="page.totalPage"/> 每页:<s:property value="page.pageSize"/>条 共计:<s:property value="page.totalCount"/>条 <%--如果总页数少于100页,输出一个select跳转框 --%> <s:if test="page.totalPage <= 100"> <s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="1"/> <s:param name="last" value="page.totalPage"/> </s:bean> <select onchange="window.location.href = this.options[this.selectedIndex].value;" size="1"> <s:iterator value="#counter"> <s:url id="goto"><s:param name="page.currentPage" value="top"/></s:url> <s:if test="top == page.currentPage"> <option value="<s:property value="%{goto}"/>" selected="selected">第<s:property/>页</option> </s:if> <s:else> <option value="<s:property value="%{goto}"/>">第<s:property/>页</option> </s:else> </s:iterator> </select> </s:if> </div> </s:if>
转载请标明出处:i flym
本文地址:https://www.iflym.com/index.php/code/201303110001.html
博主,请详细点好么?根本没法运行