mirror of https://github.com/apache/archiva.git
[MRM-861]
-added pagination to search results page git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@675415 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
15b6ddae0b
commit
2b2e21c613
|
@ -45,7 +45,7 @@ import org.codehaus.plexus.xwork.action.PlexusActionSupport;
|
||||||
*/
|
*/
|
||||||
public class SearchAction
|
public class SearchAction
|
||||||
extends PlexusActionSupport
|
extends PlexusActionSupport
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Query string.
|
* Query string.
|
||||||
*/
|
*/
|
||||||
|
@ -76,6 +76,10 @@ public class SearchAction
|
||||||
private static final String ARTIFACT = "artifact";
|
private static final String ARTIFACT = "artifact";
|
||||||
|
|
||||||
private List databaseResults;
|
private List databaseResults;
|
||||||
|
|
||||||
|
private int currentPage = 0;
|
||||||
|
|
||||||
|
private int totalPages;
|
||||||
|
|
||||||
public String quickSearch()
|
public String quickSearch()
|
||||||
throws MalformedURLException, RepositoryIndexException, RepositoryIndexSearchException
|
throws MalformedURLException, RepositoryIndexException, RepositoryIndexSearchException
|
||||||
|
@ -87,8 +91,8 @@ public class SearchAction
|
||||||
*/
|
*/
|
||||||
|
|
||||||
assert q != null && q.length() != 0;
|
assert q != null && q.length() != 0;
|
||||||
|
|
||||||
SearchResultLimits limits = new SearchResultLimits( 0 );
|
SearchResultLimits limits = new SearchResultLimits( currentPage );
|
||||||
|
|
||||||
List<String> selectedRepos = getObservableRepos();
|
List<String> selectedRepos = getObservableRepos();
|
||||||
if ( CollectionUtils.isEmpty( selectedRepos ) )
|
if ( CollectionUtils.isEmpty( selectedRepos ) )
|
||||||
|
@ -103,7 +107,9 @@ public class SearchAction
|
||||||
addActionError( "No results found" );
|
addActionError( "No results found" );
|
||||||
return INPUT;
|
return INPUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
totalPages = results.getTotalHits() / limits.getPageSize();
|
||||||
|
|
||||||
// TODO: filter / combine the artifacts by version? (is that even possible with non-artifact hits?)
|
// TODO: filter / combine the artifacts by version? (is that even possible with non-artifact hits?)
|
||||||
|
|
||||||
/* I don't think that we should, as I expect us to utilize the 'score' system in lucene in
|
/* I don't think that we should, as I expect us to utilize the 'score' system in lucene in
|
||||||
|
@ -197,4 +203,24 @@ public class SearchAction
|
||||||
{
|
{
|
||||||
return databaseResults;
|
return databaseResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCurrentPage( int page )
|
||||||
|
{
|
||||||
|
this.currentPage = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentPage()
|
||||||
|
{
|
||||||
|
return currentPage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTotalPages()
|
||||||
|
{
|
||||||
|
return totalPages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPages( int totalPages )
|
||||||
|
{
|
||||||
|
this.totalPages = totalPages;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,11 @@
|
||||||
|
|
||||||
<h1>Search</h1>
|
<h1>Search</h1>
|
||||||
|
|
||||||
|
<c:url var="imgNextPageUrl" value="/images/icon_next_page.gif"/>
|
||||||
|
<c:url var="imgPrevPageUrl" value="/images/icon_prev_page.gif"/>
|
||||||
|
<c:url var="imgPrevPageDisabledUrl" value="/images/icon_prev_page_disabled.gif"/>
|
||||||
|
<c:url var="imgNextPageDisabledUrl" value="/images/icon_next_page_disabled.gif"/>
|
||||||
|
|
||||||
<div id="contentArea">
|
<div id="contentArea">
|
||||||
<div id="searchBox">
|
<div id="searchBox">
|
||||||
<%@ include file="/WEB-INF/jsp/include/quickSearchForm.jspf" %>
|
<%@ include file="/WEB-INF/jsp/include/quickSearchForm.jspf" %>
|
||||||
|
@ -44,13 +49,72 @@
|
||||||
|
|
||||||
<%-- search was made from the indices --%>
|
<%-- search was made from the indices --%>
|
||||||
<c:when test="${databaseResults == null}">
|
<c:when test="${databaseResults == null}">
|
||||||
<p>Hits: ${fn:length(results.hits)} of ${results.totalHits}</p>
|
<c:set var="hitsNum">${fn:length(results.hits) + (currentPage * 31)}</c:set>
|
||||||
|
<p>Hits: ${hitsNum - 30} to ${hitsNum} of ${results.totalHits}</p>
|
||||||
|
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${empty results.hits}">
|
<c:when test="${empty results.hits}">
|
||||||
<p>No results</p>
|
<p>No results</p>
|
||||||
</c:when>
|
</c:when>
|
||||||
<c:otherwise>
|
<c:otherwise>
|
||||||
|
|
||||||
|
<%-- Pagination start --%>
|
||||||
|
<p>
|
||||||
|
<%-- Prev & Next icons --%>
|
||||||
|
<c:set var="prevPageUrl">
|
||||||
|
<ww:url action="quickSearch" namespace="/">
|
||||||
|
<ww:param name="q" value="%{'${q}'}"/>
|
||||||
|
<ww:param name="currentPage" value="%{'${currentPage - 1}'}"/>
|
||||||
|
</ww:url>
|
||||||
|
</c:set>
|
||||||
|
<c:set var="nextPageUrl">
|
||||||
|
<ww:url action="quickSearch" namespace="/">
|
||||||
|
<ww:param name="q" value="%{'${q}'}"/>
|
||||||
|
<ww:param name="currentPage" value="%{'${currentPage + 1}'}"/>
|
||||||
|
</ww:url>
|
||||||
|
</c:set>
|
||||||
|
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${currentPage == 0}">
|
||||||
|
<img src="${imgPrevPageDisabledUrl}"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<a href="${prevPageUrl}">
|
||||||
|
<img src="${imgPrevPageUrl}"/>
|
||||||
|
</a>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
|
||||||
|
<c:forEach var="i" begin="0" end="${totalPages - 1}">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${ (i != currentPage) }">
|
||||||
|
<c:set var="specificPageUrl">
|
||||||
|
<ww:url action="quickSearch" namespace="/">
|
||||||
|
<ww:param name="q" value="%{'${q}'}"/>
|
||||||
|
<ww:param name="currentPage" value="%{'${i}'}"/>
|
||||||
|
</ww:url>
|
||||||
|
</c:set>
|
||||||
|
<a href="${specificPageUrl}">${i + 1}</a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<b>${i + 1}</b>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forEach>
|
||||||
|
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${ currentPage eq ( totalPages - 1 ) }">
|
||||||
|
<img src="${imgNextPageDisabledUrl}"/>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<a href="${nextPageUrl}">
|
||||||
|
<img src="${imgNextPageUrl}"/>
|
||||||
|
</a>
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</p>
|
||||||
|
<%-- Pagination end --%>
|
||||||
|
|
||||||
<c:forEach items="${results.hits}" var="record" varStatus="i">
|
<c:forEach items="${results.hits}" var="record" varStatus="i">
|
||||||
<c:choose>
|
<c:choose>
|
||||||
<c:when test="${not empty (record.groupId)}">
|
<c:when test="${not empty (record.groupId)}">
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 315 B |
Binary file not shown.
After Width: | Height: | Size: 80 B |
Binary file not shown.
After Width: | Height: | Size: 317 B |
Binary file not shown.
After Width: | Height: | Size: 73 B |
Loading…
Reference in New Issue