I myself get caching with hibernate which I am using for persistance
but I wanted the more fine grained control like this so that I could page
back and forth using displaytag.org.
here is my jsp code for paging, hope this shows why I am doing it. I guess
my code is more for implimenting a client view than for heavy duty caching.
snip=
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/c" prefix="c" %>
<%@ taglib uri="/tags/displaytag-el-12" prefix="display" %>
<c:set var="forSaleProperties" value="${forSaleProperties}"></c:set>
<c:set var="contextPath" value="${request.getContextPath}"></c:set>
<c:out value="${request.getContextPath}"/>
<display:table name="${forSaleProperties}" pagesize="15"
requestURI="${pageContext.request.contextPath}/client-search-for-sale-properties-action.do">
<display:column property="id" title="Id"
href="${pageContext.request.contextPath}/client-property-view-for-sale-action.do"
paramId="id" paramProperty="id"/>
<display:column property="name" title="Name"/>
<display:column property="shortDescription" title="Desc"/>
<display:column property="town" title="Town" sortable="true"/>
<display:setProperty name="sort.behavior" value="list" />
<display:setProperty name="paging.banner.include_first_last" value="true" />
</display:table>
=snip
Cause everything is cached it is a snip to move back and forth through
the records.
--b
On Wed, 07 Jul 2004 08:41:39 -0700, Michael McGrady
<[EMAIL PROTECTED]> wrote:
> I, for one and one only, think that this sort of thing is directly
> addressing the most common recurrent question on this list. So, if
> anything, this de-spams the list. Thanks for the suggestion.
>
> At 04:57 AM 7/7/2004, you wrote:
> >Sorry if this is considered spamming the list ....
> >
> >Speaking of storing stuff in session scope. I've developed what I think is
> >a handy class which I think it useful for
> >when I want to store something like a search in a session variable.
> >
> >For instance if I want to page through it ( using displaytags.org (10 out
> >of 10)) or simply if I don't want to fetch
> >from the database time and time again.
> >By default the data expires on an hourly basis. And if a different
> >combination of parameters is sent it expires
> >the cached stuff.
> >
> >Here is the class
> >
> >snip=
> >package ie.jestate.struts.client;
> >
> >import java.util.Date;
> >
> >/**
> >* @author Bryan Hunt
> >*/
> >//TODO:Perhaps I should be generating a MD5 or something but I can't see a
> >good reason to use any more CPU
> >
> >public class HashGenerator {
> >
> > private StringBuffer buffer;
> >
> >
> > /**
> > *
> > */
> > public HashGenerator() {
> > super();
> > buffer = new StringBuffer(50);
> > // TODO Auto-generated constructor stub
> > }
> >
> > /**
> > * @param urbanAreas
> > */
> > public void add(Integer[] array,String fieldname) {
> > for (int i = 0; i < array.length; i++) {
> > Integer integer = array[i];
> > buffer.append(integer);
> > }
> > buffer.append(fieldname);
> > buffer.append("-");
> > }
> >
> > /**
> > * @param priceRangeStart
> > */
> > public void add(Integer integer,String fieldname) {
> > // TODO Auto-generated method stub
> > buffer.append(integer);
> > buffer.append(fieldname);
> > buffer.append("-");
> > }
> >
> > /**
> > * @return
> > */
> > public String getHash() {
> >
> > //I append the hour onto the end of the string so that a hash will
> > //only be good for a max of one hour.
> > Date date = new Date();
> >
> > return buffer.toString()+ "-" + new Integer(date.getHours());
> > }
> >
> >}
> >
> >=snip
> >
> >And here is example usage.
> >snip=
> >/*
> >* Created on 24-Jun-2004
> >*/
> >package ie.jestate.struts.client;
> >
> >import ie.jestate.struts.BaseAction;
> >
> >import java.util.Set;
> >
> >import javax.servlet.http.HttpServletRequest;
> >import javax.servlet.http.HttpServletResponse;
> >import javax.servlet.http.HttpSession;
> >
> >import org.apache.struts.action.ActionForm;
> >import org.apache.struts.action.ActionForward;
> >import org.apache.struts.action.ActionMapping;
> >import org.apache.struts.action.DynaActionForm;
> >
> >/**
> >* @author Bryan Hunt
> > *
> >*/
> >public class ForSaleSearchAction extends BaseAction {
> >
> > /* (non-Javadoc)
> > * @see
> > org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
> > org.apache.struts.action.ActionForm,
> > javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
> > */
> > public ActionForward execute(
> > ActionMapping actionMapping,
> > ActionForm actionForm,
> > HttpServletRequest request,
> > HttpServletResponse response)
> > throws Exception {
> >
> > //TODO: Database based initialization of the countries collection
> > DynaActionForm dynaform = (DynaActionForm) actionForm;
> > HttpSession session = request.getSession();
> > String forSalePropertiesSearchCheckSum = (String)
> > session.getAttribute(Constants.FOR_SALE_CHECK_SUM);
> > String newForSalePropertiesSearchCheckSum = null;
> >
> > Integer[] urbanAreas = (Integer[]) dynaform.get("urbanAreas");
> > Integer priceRangeStart = (Integer) dynaform.get("priceRangeStart");
> > Integer priceRangeEnd = (Integer) dynaform.get("priceRangeEnd");
> > Integer[] propertyTypes = (Integer[]) dynaform.get("propertyTypes");
> >
> > HashGenerator hashGenerator = new HashGenerator();
> > hashGenerator.add(urbanAreas,"urbanAreas");
> > hashGenerator.add(priceRangeStart,"priceRangeStart");
> > hashGenerator.add(priceRangeEnd,"priceRangeEnd");
> > hashGenerator.add(propertyTypes,"propertyTypes");
> > newForSalePropertiesSearchCheckSum =
> > hashGenerator.getHash();
> >
> > if(forSalePropertiesSearchCheckSum != null &&
> > forSalePropertiesSearchCheckSum.equals(newForSalePropertiesSearchCheckSum)) {
> > System.out.println("Checksums match");
> > }
> >
> > if (forSalePropertiesSearchCheckSum == null
> > ||
> > !forSalePropertiesSearchCheckSum.equals(newForSalePropertiesSearchCheckSum)){
> >
> > Set forSaleProperties =
> > findForSaleProperties(
> > urbanAreas,
> > priceRangeStart,
> > priceRangeEnd,
> > propertyTypes);
> >
> >session.setAttribute(Constants.FOR_SALE_PROPERTIES_SEARCH_RESULT,
> >forSaleProperties);
> > session.setAttribute(
> > Constants.FOR_SALE_CHECK_SUM,
> > newForSalePropertiesSearchCheckSum);
> >// TODO:Add logging functionality
> > System.out.println("Returning fresh search results");
> >
> > } else
> > /*
> > if (
> >
> >session.getAttribute("forSalePropertiesSearchCheckSum").equals(
> > forSalePropertiesSearchCheckSum))
> > */
> > {
> > //This means that it is the same search, just called again.
> > //TODO:Add logging functionality
> > System.out.println("Returning cached search results");
> >
> >
> > }
> >
> > //TODO: Decent logging is needed here
> > System.out.println(forSalePropertiesSearchCheckSum);
> > System.out.println(newForSalePropertiesSearchCheckSum);
> > System.out.println(" ---------------------------------------" );
> >
> > return actionMapping.findForward("success");
> > }
> >}
> >
> >=snip
> >
> >
> >
> >
> >Christina Siena wrote:
> >
> >>I recently developed an application with a complex UI. One of the pages
> >>required querying the database based on user selection and re-displaying
> >>the page with the retrieved data and any previous existing user
> >>selections. Four different fields can trigger a db query resulting in
> >>page re-display and validations can also result in page re-display. Each
> >>time the page is re-displayed, the "state" of the page must be
> >>"remembered" from the last time it was displayed. (still with me so far?)
> >>Most of the data re
>
>
> >>
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]