|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.velocity.tools.view.PagerTool org.apache.velocity.tools.view.AbstractSearchTool
@DefaultKey(value="search") @InvalidScope(value={"application","session"}) public abstract class AbstractSearchTool
Abstract view tool for doing "searching" and robust pagination of search results. The goal here is to provide a simple and uniform API for "search tools" that can be used in velocity templates (or even a standard Search.vm template). In particular, this class provides good support for result pagination and some very simple result caching.
Usage:
To use this class, you must extend it and implement
the executeQuery(Object) method.
The setCriteria(Object) method takes an Object in order to allow the search criteria to meet your needs. Your criteria may be as simple as a single string, an array of strings, or whatever you like. The value passed into this method is that which will ultimately be passed into executeQuery(Object) to perform the search and return a list of results. A simple implementation might be like:
protected List executeQuery(Object crit) { return MyDbUtils.getFooBarsMatching((String)crit); }
Here's an example of how your subclass would be used in a template:
<form name="search" method="get" action="$link.setRelative('search.vm')"> <input type="text"name="find" value="$!search.criteria"> <input type="submit" value="Find"> </form> #if( $search.hasItems() ) Showing $!search.pageDescription<br> #set( $i = $search.index ) #foreach( $item in $search.page ) ${i}. $!item <br> #set( $i = $i + 1 ) #end <br> #if ( $search.pagesAvailable > 1 ) #set( $pagelink = $link.setRelative('search.vm').addQueryData("find",$!search.criteria).addQueryData("show",$!search.itemsPerPage) ) #if( $search.prevIndex ) <a href="$pagelink.addQueryData('index',$!search.prevIndex)">Prev</a> #end #foreach( $index in $search.slip ) #if( $index == $search.index ) <b>$search.pageNumber</b> #else <a href="$pagelink.addQueryData('index',$!index)">$!search.getPageNumber($index)</a> #end #end #if( $search.nextIndex ) <a href="$pagelink.addQueryData('index',$!search.nextIndex)">Next</a> #end #end #elseif( $search.criteria ) Sorry, no matches were found for "$!search.criteria". #else Please enter a search term #endThe output of this might look like:
Example toolbox.xml configuration:
<tools> <toolbox scope="request"> <tool class="com.foo.tools.MySearchTool"/> </toolbox> </tools>
Nested Class Summary | |
---|---|
static class |
AbstractSearchTool.StoredResults
Simple utility class to hold a criterion and its result list. |
Field Summary | |
---|---|
private java.lang.Object |
criteria
|
private java.lang.String |
criteriaKey
|
static java.lang.String |
DEFAULT_CRITERIA_KEY
|
protected org.apache.velocity.runtime.log.Log |
LOG
|
protected static java.lang.String |
STORED_RESULTS_KEY
the key under which StoredResults are kept in session |
Fields inherited from class org.apache.velocity.tools.view.PagerTool |
---|
DEFAULT_INDEX_KEY, DEFAULT_ITEMS_PER_PAGE, DEFAULT_ITEMS_PER_PAGE_KEY, DEFAULT_NEW_ITEMS_KEY, DEFAULT_SLIP_SIZE, DEFAULT_SLIP_SIZE_KEY, session, STORED_ITEMS_KEY |
Constructor Summary | |
---|---|
AbstractSearchTool()
|
Method Summary | |
---|---|
protected abstract java.util.List |
executeQuery(java.lang.Object criteria)
Executes a query for the specified criteria. |
java.lang.Object |
getCriteria()
Return the criteria object for this request. |
java.lang.String |
getCriteriaKey()
|
java.util.List |
getItems()
Gets the results for the given criteria either in memory or by performing a new query for them. |
protected java.util.List |
getStoredItems()
Retrieves stored search items (if any) from the user's session attributes. |
protected AbstractSearchTool.StoredResults |
getStoredResults()
Retrieves stored search results (if any) from the user's session attributes. |
void |
reset()
Sets the criteria and results to null, page index to zero, and items per page to the default. |
void |
setCriteria(java.lang.Object criteria)
Sets the criteria for this search. |
void |
setCriteriaKey(java.lang.String key)
|
void |
setLog(org.apache.velocity.runtime.log.Log log)
|
protected void |
setStoredItems(java.util.List items)
Stores current search items in the user's session attributes (if one currently exists) in order to do efficient result pagination. |
protected void |
setStoredResults(AbstractSearchTool.StoredResults results)
Stores current search results in the user's session attributes (if one currently exists) in order to do efficient result pagination. |
void |
setup(javax.servlet.http.HttpServletRequest request)
Sets the criteria *if* it is set in the request parameters. |
Methods inherited from class org.apache.velocity.tools.view.PagerTool |
---|
getCreateSession, getFirstIndex, getIndex, getIndexKey, getItemsPerPage, getItemsPerPageKey, getLastIndex, getNewItemsKey, getNextIndex, getPage, getPageDescription, getPageNumber, getPageNumber, getPagesAvailable, getPrevIndex, getSlip, getSlipSize, getSlipSizeKey, getTotal, hasItems, setCreateSession, setIndex, setIndexKey, setItems, setItemsPerPage, setItemsPerPageKey, setNewItemsKey, setRequest, setSlipSize, setSlipSizeKey |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String DEFAULT_CRITERIA_KEY
protected static final java.lang.String STORED_RESULTS_KEY
protected org.apache.velocity.runtime.log.Log LOG
private java.lang.String criteriaKey
private java.lang.Object criteria
Constructor Detail |
---|
public AbstractSearchTool()
Method Detail |
---|
public void setLog(org.apache.velocity.runtime.log.Log log)
public void setup(javax.servlet.http.HttpServletRequest request)
setup
in class PagerTool
request
- the current HttpServletRequestpublic void setCriteriaKey(java.lang.String key)
public java.lang.String getCriteriaKey()
public void reset()
reset
in class PagerTool
public void setCriteria(java.lang.Object criteria)
criteria
- - the criteria used for this searchpublic java.lang.Object getCriteria()
public java.util.List getItems()
getItems
in class PagerTool
List
of all items for the criteriaprotected java.util.List getStoredItems()
PagerTool
getStoredItems
in class PagerTool
List
retrieved from memoryprotected void setStoredItems(java.util.List items)
PagerTool
Override this to store search items somewhere besides the HttpSession or to prevent storage of items across requests. In the former situation, you must also override getStoredItems().
setStoredItems
in class PagerTool
items
- the List
to be storedprotected abstract java.util.List executeQuery(java.lang.Object criteria)
This method must be implemented! A simple implementation might be something like:
protected List executeQuery(Object crit) { return MyDbUtils.getFooBarsMatching((String)crit); }
List
of results for this queryprotected AbstractSearchTool.StoredResults getStoredResults()
AbstractSearchTool.StoredResults
retrieved from memoryprotected void setStoredResults(AbstractSearchTool.StoredResults results)
Override this to store search results somewhere besides the HttpSession or to prevent storage of results across requests. In the former situation, you must also override getStoredResults().
results
- the AbstractSearchTool.StoredResults
to be stored
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |