page-taglib.jar是为jsp-servlet程序写的,没有考虑到struts. 所以当Action类型为DispatchAction时会有错误。 因此需要修改一下他的源代码,(可以下载page-src.jar. )
在翻页的页面上需要include一个jsp,这个jsp里包含了翻页的功能,以此进行翻页。如下:
<pg:index export="totalItems=itemCount">
<pg:page export="firstItem, lastItem">
<div class="resultInfo">
Displaying results <strong><%= firstItem %>-<%= lastItem %></strong> of <strong><%= totalItems %></strong> found
</div>
</pg:page>
<div class="rnav">
<span class="rnavLabel">Results:</span>
<pg:prev export="pageUrl">
<a href="<%= pageUrl %>" class="rnavLink">« Prev</a>
</pg:prev>
<pg:pages export="pageUrl,pageNumber,firstItem,lastItem">
<% if (pageNumber == currentPageNumber) { %>
<span class="rnavCurr"><%= firstItem %>-<%= lastItem %></span>
<% } else { %>
<a href="<%= pageUrl %>" class="rnavLink"><%= firstItem %>-<%= lastItem %></a>
<% } %>
</pg:pages>
<pg:next export="pageUrl">
<a href="<%= pageUrl %>" class="rnavLink">Next »</a>
</pg:next>
</div>
</pg:index>
可见,<pg:pages export="pageUrl,pageNumber,firstItem,lastItem">这句话,就是从pg:pages所表示的tag里
获得变量pageUrl并根据它来进行跳转,这个pageUrl就是查询符合提交记录。。因为我使用struts 的DispatchAction,因此这个pageUrl的样子如下:
/PointListAction.do?method=displayList&uid=gg&ad_id=90 ,
PagerTag中的一处需要修改:
原:
final String getOffsetUrl(int pageOffset) {
int uriLen = uri.length();
//log.info("the varname=uri ,value=" + uri);
uri.append(params == 0 ? '?' : '&'); // 这里对DispatchAction的path不适用。
uri.append(idOffsetParam).append('=').append(pageOffset);
String offsetUrl = uri.toString();
uri.setLength(uriLen);
return offsetUrl;
}
final void addParam(String name, String value) {
if (value != null) {
name = java.net.URLEncoder.encode(name);
value = java.net.URLEncoder.encode(value);
uri.append(params == 0 ? '?' : '&');
。。。
}
修改成:
final String getOffsetUrl(int pageOffset) {
int uriLen = uri.length();
//log.info("the varname=uri ,value=" + uri);
if( uri.indexOf("?") == -1){
uri.append(params == 0 ? '?' : '&');
}else{
uri.append("&");
}
uri.append(idOffsetParam).append('=').append(pageOffset);
String offsetUrl = uri.toString();
uri.setLength(uriLen);
return offsetUrl;
}
final void addParam(String name, String value) {
if (value != null) {
name = java.net.URLEncoder.encode(name);
value = java.net.URLEncoder.encode(value);
if(uri.indexOf("?")==-1)
uri.append(params == 0 ? '?' : '&');
else
uri.append('&');
...
}
这样,就可以使用DispatchAction正常地使用JspPagerTag了,修改了源码,可以打一个新的包,放到
工程里。至于如何使用JspPagerTag翻页,我还写了一个小例子。明天再说吧。