翻页功能其实很简单
就是在当前的查询结果的基础上,向下查询hitsPerPage个结果,但要注意因为search.jsp源码中,将每个站点的查询返回结果数hitsPerSite设置为2,所以翻页是会出现问题,就是返回结果数不正确,可以根据上一篇介绍的方法解决这个问题。
代码改动:
将原来search.jsp中的如下代码:
if ((hits.totalIsExact() && end < hits.getTotal()) // more hits to show
|| (!hits.totalIsExact() && (hits.getLength() > start+hitsPerPage))) {
%>
<form name="next" action="../search.jsp" method="get">
<input type="hidden" name="query" value="<%=htmlQueryString%>">
<input type="hidden" name="lang" value="<%=queryLang%>">
<input type="hidden" name="start" value="<%=end%>">
<input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
<input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
<input type="hidden" name="clustering" value="<%=clustering%>">
<input type="submit" value="<i18n:message key="next"/>">
<% if (sort != null) { %>
<input type="hidden" name="sort" value="<%=sort%>">
<input type="hidden" name="reverse" value="<%=reverse%>">
<% } %>
</form>
<%
}
if ((!hits.totalIsExact() && (hits.getLength() <= start+hitsPerPage))) {
%>
<form name="showAllHits" action="../search.jsp" method="get">
<input type="hidden" name="query" value="<%=htmlQueryString%>">
<input type="hidden" name="lang" value="<%=queryLang%>">
<input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
<input type="hidden" name="hitsPerSite" value="0">
<input type="hidden" name="clustering" value="<%=clustering%>">
<input type="submit" value="<i18n:message key="showAllHits"/>">
<% if (sort != null) { %>
<input type="hidden" name="sort" value="<%=sort%>">
<input type="hidden" name="reverse" value="<%=reverse%>">
<% } %>
</form>
<%
}
%>
替换为:
<table align="center">
<tr>
<td>
<%
// 显示上一页按钮
if (start >= hitsPerPage)
{
%>
<form name="pre" action="../search.jsp" method="get">
<input type="hidden" name="query" value="<%=htmlQueryString%>">
<input type="hidden" name="lang" value="<%=queryLang%>">
<input type="hidden" name="start" value="<%=start - hitsPerPage%>">
<input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
<input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
<input type="hidden" name="clustering" value="<%=clustering%>">
<input type="submit" value="上一页">
<%} %>
</form>
<%
//显示页码按钮
int startnum=1;
//页面中最前面的页码编号,我设定(满足)共10页,当页为第6页
//若果结果大于等于11页,每次显示11个按钮,当前按钮在最中间,即第6个
if((int)(start/hitsPerPage)>=5)
startnum=(int)(start/hitsPerPage)-4;
for(int i=hitsPerPage*(startnum-1),j=0;i<=hits.getTotal()&&j<=10;)
{
if(hits.getTotal()%10==0&&i==hits.getTotal()) break; //搜索结果为整数的时候处理
%>
<td>
<!-- <%=startnum%> && <%=hits.getTotal()%> -->
<form name="next" action="../search.jsp" method="get">
<input type="hidden" name="query" value="<%=htmlQueryString%>">
<input type="hidden" name="lang" value="<%=queryLang%>">
<input type="hidden" name="start" value="<%=i%>">
<input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
<input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
<input type="hidden" name="clustering" value="<%=clustering%>">
<input type="submit" value="<%=i/hitsPerPage+1 %>">
</form>
</td>
<%
i=i+10;
j++;
}//for
%>
<td>
<%
//显示下一页按钮
if ((hits.totalIsExact() && end < hits.getTotal()) // more hits to show
|| (!hits.totalIsExact() && (hits.getLength() > start + hitsPerPage))) {
%>
<form name="next" action="../search.jsp" method="get">
<input type="hidden" name="query" value="<%=htmlQueryString%>">
<input type="hidden" name="lang" value="<%=queryLang%>">
<input type="hidden" name="start" value="<%=end%>">
<input type="hidden" name="hitsPerPage" value="<%=hitsPerPage%>">
<input type="hidden" name="hitsPerSite" value="<%=hitsPerSite%>">
<input type="hidden" name="clustering" value="<%=clustering%>">
<input type="submit" value="<i18n:message key="next"/>">
</form>
<%} %>
</td>
</tr>
</table>
就可以实现翻页。