Add previous and next links to search result paging. Small style changes.

This commit is contained in:
rjy7 2010-08-27 18:47:56 +00:00
parent 589383f15b
commit 5d53dd4b2b
3 changed files with 33 additions and 16 deletions

View file

@ -16,12 +16,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -50,9 +47,9 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.beans.Portal;
import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Params; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Params;
import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao; import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao;
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
@ -92,7 +89,7 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
private IndexSearcher searcher = null; private IndexSearcher searcher = null;
private static final Log log = LogFactory.getLog(FreemarkerPagedSearchController.class.getName()); private static final Log log = LogFactory.getLog(FreemarkerPagedSearchController.class.getName());
String NORESULT_MSG = "The search returned no results."; String NORESULT_MSG = "The search returned no results.";
private int defaultHitsPerPage = 25; private int defaultHitsPerPage = 2; //25;
private int defaultMaxSearchSize= 1000; private int defaultMaxSearchSize= 1000;
public void init(ServletConfig config) throws ServletException { public void init(ServletConfig config) throws ServletException {
@ -219,6 +216,7 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
Params pagingLinkParams = new Params(); Params pagingLinkParams = new Params();
pagingLinkParams.put("querytext", qtxt); pagingLinkParams.put("querytext", qtxt);
pagingLinkParams.put("hitsPerPage", String.valueOf(hitsPerPage));
String classGroupParam = vreq.getParameter("classgroup"); String classGroupParam = vreq.getParameter("classgroup");
String typeParam = vreq.getParameter("type"); String typeParam = vreq.getParameter("type");
@ -279,7 +277,14 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
body.put("typeName", type.getName()); body.put("typeName", type.getName());
} }
body.put("pagingLinks", getPagingLinks(startIndex, hitsPerPage, hitsLength, maxHitSize, vreq.getServletPath(), pagingLinkParams)); body.put("pagingLinks", getPagingLinks(startIndex, hitsPerPage, hitsLength, maxHitSize, vreq.getServletPath(), pagingLinkParams));
if (startIndex != 0) {
body.put("prevPage", getPreviousPageLink(startIndex, hitsPerPage, vreq.getServletPath(), pagingLinkParams));
}
if (startIndex < (hitsLength - hitsPerPage)) {
body.put("nextPage", getNextPageLink(startIndex, hitsPerPage, vreq.getServletPath(), pagingLinkParams));
}
} catch (Throwable e) { } catch (Throwable e) {
log.error(e, e); log.error(e, e);
@ -390,14 +395,10 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
return pagingLinks; return pagingLinks;
} }
int pageNumber;
params.put("hitsPerPage", String.valueOf(hitsPerPage));
for (int i = 0; i < hitsLength; i += hitsPerPage) { for (int i = 0; i < hitsLength; i += hitsPerPage) {
params.put("startIndex", String.valueOf(i)); params.put("startIndex", String.valueOf(i));
if ( i < maxHitSize - hitsPerPage) { if ( i < maxHitSize - hitsPerPage) {
pageNumber = i/hitsPerPage + 1; int pageNumber = i/hitsPerPage + 1;
if (i >= startIndex && i < (startIndex + hitsPerPage)) { if (i >= startIndex && i < (startIndex + hitsPerPage)) {
pagingLinks.add(new PagingLink(pageNumber)); pagingLinks.add(new PagingLink(pageNumber));
} else { } else {
@ -411,6 +412,18 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
return pagingLinks; return pagingLinks;
} }
private String getPreviousPageLink(int startIndex, int hitsPerPage, String baseUrl, Params params) {
params.put("startIndex", String.valueOf(startIndex-hitsPerPage));
//return new PagingLink("Previous", baseUrl, params);
return UrlBuilder.getUrl(baseUrl, params);
}
private String getNextPageLink(int startIndex, int hitsPerPage, String baseUrl, Params params) {
params.put("startIndex", String.valueOf(startIndex+hitsPerPage));
//return new PagingLink("Next", baseUrl, params);
return UrlBuilder.getUrl(baseUrl, params);
}
private class PagingLink extends LinkTemplateModel { private class PagingLink extends LinkTemplateModel {
PagingLink(int pageNumber, String baseUrl, Params params) { PagingLink(int pageNumber, String baseUrl, Params params) {
@ -426,9 +439,6 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple
PagingLink(String text, String baseUrl, Params params) { PagingLink(String text, String baseUrl, Params params) {
super(text, baseUrl, params); super(text, baseUrl, params);
} }
} }
private List<VClass> getVClasses(VClassDao vclassDao, TopDocs topDocs, private List<VClass> getVClasses(VClassDao vclassDao, TopDocs topDocs,

View file

@ -35,6 +35,9 @@ public abstract class Files extends BaseTemplateModel {
} }
public void addFromTheme(String path) { public void addFromTheme(String path) {
if (!path.startsWith("/")) {
path = "/" + path;
}
path = themeDir + getThemeSubDir() + path; path = themeDir + getThemeSubDir() + path;
add(path); add(path);
} }

View file

@ -42,14 +42,18 @@
<#if (pagingLinks?size > 0)> <#if (pagingLinks?size > 0)>
<div class="searchpages"> <div class="searchpages">
Pages: Pages:
<#if prevPage??><a class="pagingLink prev" href="${prevPage}">Previous</a></#if>
<#list pagingLinks as link> <#list pagingLinks as link>
<#if link.url??> <#if link.url??>
<a href="${link.url}">${link.text}</a> <a class="pagingLink" href="${link.url}">${link.text}</a>
<#else> <#else>
${link.text} <#-- no link if current page --> ${link.text} <#-- no link if current page -->
</#if> </#if>
</#list> </#list>
<#if nextPage??><a class="pagingLink next" href="${nextPage}">Next</a></#if>
</div> </div>
</#if> </#if>
</div> <!-- end contentsBrowseGroup --> </div> <!-- end contentsBrowseGroup -->
${stylesheets.addFromTheme("search.css")}