Re: Pagination query

From: Laszlo Spoor (lspoor_cayenn..otmail.com)
Date: Sun Mar 06 2005 - 09:12:39 EST

  • Next message: Laszlo Spoor: "RE: Heretofore unseen error"

    Hi Sami,

    I am happy it works now. Interesting solution btw.. I use the tag libs
    exactly like I wrote you, not using anything like offset and length.

    Laszlo
    >From: "Sami Mohammed" <SMOHAMME..ndependenthealth.com>
    >Reply-To: cayenne-use..bjectstyle.org
    >To: <cayenne-use..bjectstyle.org>
    >Subject: Re: Pagination query
    >Date: Fri, 04 Mar 2005 20:02:57 -0500
    >
    >Hi Laszlo,
    >
    >Thank you for u great help. its working now.
    >
    >We have to give "offset" and " lenght" in the struts itreate tag, when i
    >set iterate tag it works, other wise its retreving all the rows.
    >there is no problem in cayenne, but setting in struts iterate tag.
    >
    >Example: jsp page:
    >
    ><% curRow = request.getParameter("curRow"); %>
    >
    ><logic:iterate name="DisplayResult" property="cwTableRecords" id="cwRecord"
    >indexId="index" offset="<%= curRow %>" length="25" >
    >
    >
    >you can give length = <%= request.getPrameter(" pageSize") %> also or can
    >hard code it.
    >
    >Thanks
    >sami
    >
    >CONFIDENTIALITY NOTICE. This e-mail and attachments, if any, may contain
    >confidential information which is privileged and protected from disclosure
    >by Federal and State
    >confidentiality laws rules and regulations. This e-mail and attachments,
    >if any, are intended for the designated addressee only. If you are not the
    >designated addressee, you
    >are hereby notified that any disclosure, copying, or distribution of this
    >e-mail and its attachments, if any, may be unlawful and may subject you to
    >legal consequences. If you
    >have received this e-mail and attachments in error, please contact
    >Independent Health immediately at (716) 631-3001 and delete the e-mail and
    >its attachments from your
    >computer. Thank you for your attention
    >
    > >>> lspoor_cayenn..otmail.com 03/02/05 02:56PM >>>
    >Hi Sami,
    >
    >Quickly scanning your code. I notice that:
    >
    >You set the currentRow as a constant. If you have a pagesize of 15, then
    >your currentRow should be something like 0, 15,30, 45, etc.. So, you should
    >get it from your request. Helper logic is inside the PagedObjectList.
    >
    >Let me take you again trough the steps that are to be followed:
    >1. Subclass the PagedObjectList,
    >2. Execute your query, where you wrap your results in the subclass
    >mentioned
    >at 1.
    >3. Place the ArrayList myInstance.subSetList() in your request, as well as
    >the properties needed for your pager.
    >4. Loop trough it in your Java ServerPage using the <logic:iterate/>-tag
    >
    >ad 1.
    >Assume you have a SubClass called ComplexList (extends PagedObjectList),
    >which only has a single Constructor. It can have two if you want to use
    >this
    >PagedObjectList as a ListOfValues.
    >
    >public ComplexList (List pList, int pPageSize, int pCurrentRow)
    >{
    > super(pList, pPageSize, pCurrentRow);
    >}
    >
    >Let's define the parameters:
    >pList: The List Cayenne will return
    >pPageSize: How many rows do you want to see on your page?
    >pCurrentRow: Where are we at this moment in the resultset?
    >
    >ad. 2
    >[...]
    > SelectQuery qry = new SelectQuery (Complex.class);
    > qry.setPageSize(pPageSize.intValue());
    > List lst = mContext.performQuery(qry);
    >
    > // This is the subclassed bean.
    > ComplexList cpxList = new ComplexList (lst, pPageSize.intValue(),
    >pCurrentRow.intValue());
    >[..]
    >
    >This example shows that you place the lst List inside the ComplexList. You
    >also pass the pPageSize (e.g. a rowset of 15) and the currentRow. The
    >currentRow is the pointer that keeps track of your position in the entire
    >resultset.
    >
    >ad. 3
    > // Place the resultset in your request.. This is the object you use in
    >your <logic:iterate>-tag.
    > request.setAttribute("cpxList", cpxList.getSubSetList());
    >
    > // Populate pager
    > // Previous ResultSet
    > Boolean hasPrev = new Boolean(cpxList.hasPreviousSet());
    > request.setAttribute("hasPrevious", hasPrev);
    >
    > HashMap m1 = new HashMap();
    > m1.put("curRow", new Integer(cpxList.getPreviousSet()));
    > request.setAttribute("prevSet", m1);
    >
    > // Next ResultSet
    > Boolean hasNext = new Boolean(cpxList.hasNextSet());
    > request.setAttribute("hasNext", hasNext);
    >
    > HashMap m2 = new HashMap();
    > m2.put("curRow", new Integer(cpxList.getNextSet()));
    > request.setAttribute("nextSet", m2);
    >
    > // Remember the current row.
    > request.setAttribute("curRow", curRow == null ? "0" : curRow);
    >
    >Please note that getPreviousSet() returns the previous resultset from a
    >persective of your currentRow and getNextSet() returns the next record set.
    >For example: Assume your pagesize is 15 and you are at position 45 of 78 in
    >your resultset. The method getPreviousSet() returns 30 and getNextSet()
    >returns 45. PagedObjectList takes note of the length of your resultset,
    >meaning that it will not return a currentRow like 90. The Booleans are set
    >so you can determine in your jsp if you should display a next/previous
    >url/button/image or not. Now we are ready to go to the jsp.
    >
    >ad. 4
    >First we will take a look on how to populate the pager. I have created a
    >reusable 'tile' (see: Jakarta Tiles for more information), so I pass an url
    >as a parameter. In our example this could be /populateCpxList.do. Further
    >you see I use the Booleans to find out whether I should display a link or
    >just some text. The url for the nextSet is:
    >http://myserver.somewhere.com/myapp/populateCpxList.do?curRow=15 (assuming
    >that this is the first time you enter the page). The url for the
    >previousSet
    >is... Just plain text (not an url), because there is not a previous
    >resultset. The <bean:message>-tags reads the value belonging to that key
    >from a resource bundle.
    >
    ><%-- Retrieve the url needed for paging from the Tiles template --%>
    ><tiles:useAttribute name="url" classname="java.lang.String"/>
    >
    ><%-- Previous --%>
    ><logic:equal name="hasPrevious" value="true">
    > <html:link page="<%=url%>"
    > name="prevSet">
    > <bean:message key="def.pager.previous"/>
    > </html:link>
    ></logic:equal>
    >
    ><logic:equal name="hasPrevious" value="false">
    > <bean:message key="def.pager.previous"/>
    ></logic:equal>
    >
    ><%-- Next --%>
    ><logic:equal name="hasNext" value="true">
    > <html:link page="<%=url%>"
    > name="nextSet">
    > <bean:message key="def.pager.next"/>
    > </html:link>
    ></logic:equal>
    >
    ><logic:equal name="hasNext" value="false">
    > <bean:message key="def.pager.next"/>
    ></logic:equal>
    >
    >How to loop trough your ComplexList JavaBean:
    >
    ><logic:iterate id="cpx" name="cpxList">
    > <bean:write name="cpx" property="code"/><br>
    ></logic:iterate>
    >
    >This is the only tag needed for looping trough the PagedObjectList. The
    >'name' attribute points to the name of the PagedObjectList you placed in
    >your request. The 'id' attribute is the identifier that points to a single
    >instance in the list, a Complex. This piece of code will Display all the
    >'code' attributes of a Complex, for example: 212, 220, 234, 70 (stuff
    >derived from the database).
    >
    >I hope this walktrough will solve your problems.... Regards, Laszlo
    >
    > >From: "Sami Mohammed" <SMOHAMME..ndependenthealth.com>
    > >Reply-To: cayenne-use..bjectstyle.org
    > >To: <cayenne-use..bjectstyle.org>
    > >Subject: Re: Pagination query
    > >Date: Tue, 01 Mar 2005 19:57:40 -0500
    > >
    > >Hi Joshua,
    > >
    > >I didnt get anything with those two attributes.
    > >
    > >thanks
    > >sami
    > >
    > >CONFIDENTIALITY NOTICE. This e-mail and attachments, if any, may contain
    > >confidential information which is privileged and protected from
    >disclosure
    > >by Federal and State
    > >confidentiality laws rules and regulations. This e-mail and attachments,
    > >if any, are intended for the designated addressee only. If you are not
    >the
    > >designated addressee, you
    > >are hereby notified that any disclosure, copying, or distribution of this
    > >e-mail and its attachments, if any, may be unlawful and may subject you
    >to
    > >legal consequences. If you
    > >have received this e-mail and attachments in error, please contact
    > >Independent Health immediately at (716) 631-3001 and delete the e-mail
    >and
    > >its attachments from your
    > >computer. Thank you for your attention
    > >
    > > >>> joshua.t.pyl..mail.com 03/01/05 06:11PM >>>
    > >Sorry Sami but I don't use the logic:iterate tag. I also use struts
    > >but I use my own custom tag to render the results of my queries.
    > >
    > >Here is a link to the Struts documentation that mentions a length and
    > >offest attribute...
    > >
    > >http://struts.apache.org/userGuide/struts-logic.html#iterate
    > >
    > >My advise is you experiment with those two attributes and see what you
    >get.
    > >
    > >On Tue, 01 Mar 2005 16:16:48 -0500, Sami Mohammed
    > ><SMOHAMME..ndependenthealth.com> wrote:
    > > > Hi joshua,
    > > >
    > > > Thank you.
    > > >
    > > > I am using struts iterate tag to display.
    > > > see the code BELOW:
    > > >
    > > > <logic:iterate id="display" name="DisplayResult">
    > > > <bean:write name="display" property="name"/>
    > > > </logic:iterate>
    > > >
    > > > In action class i Stored the Display object into the request object
    >like
    > >this
    > > >
    > > > request.setAttribute("DisplayResult", cwViewBean);
    > > >
    > > > anything i have to do with iterate tag to limit the rows, since i
    > >already limit the pageSize to 25 in action class.
    > > >
    > > > if you have any idea pls let me know.
    > > >
    > > > thanks
    > > > sami
    > > >
    > > > CONFIDENTIALITY NOTICE. This e-mail and attachments, if any, may
    > >contain confidential information which is privileged and protected from
    > >disclosure by Federal and State
    > > > confidentiality laws rules and regulations. This e-mail and
    > >attachments, if any, are intended for the designated addressee only. If
    > >you are not the designated addressee, you
    > > > are hereby notified that any disclosure, copying, or distribution of
    > >this e-mail and its attachments, if any, may be unlawful and may subject
    > >you to legal consequences. If you
    > > > have received this e-mail and attachments in error, please contact
    > >Independent Health immediately at (716) 631-3001 and delete the e-mail
    >and
    > >its attachments from your
    > > > computer. Thank you for your attention
    > > >
    > > > >>> joshua.t.pyl..mail.com 03/01/05 03:33PM >>>
    > > > It might help Sami if you did not comment out the following 2 lines...
    > > >
    > > > // adding paging functionality
    > > > //cwTableParamMap.put(Constants.CW_REQ_PARAM_PAGE_SIZE, new
    > >Integer(mPageSize));
    > > > //cwTableParamMap.put(Constants.CW_REQ_PARAM_CURRENT_ROW, new
    > > > Integer(mCurrentRow));
    > > > // adding paging functionality
    > > >
    > > > I don't know this crosswalk thing but you seem to have commented out
    > > > the controls that would limit your paging. The way cayenne does its
    > > > paging is that it will only query the data on a per page basis but if
    > > > your code loops through all of the data it will retrieve all of the
    > > > data.
    > > >
    > > > It appears that your cntrols to limit the looping of your result list
    > > > is not in place.
    > > >
    > > > Once again I do not know crosswalk so take my answer with that grain
    >of
    > >salt.
    > > >
    > > > On Tue, 1 Mar 2005 13:47:20 -0500 (EST), Andrus Adamchik
    > > > <andru..bjectstyle.org> wrote:
    > > > > Sami,
    > > > >
    > > > > I understand that you are stuck at the moment. But please don't
    >repost
    > > > > your question over and over again. Somebody (maybe myself) will look
    > >at
    > > > > it, just give it some time. That's the nature of free support -
    >people
    > >are
    > > > > willing to give their time to community, but you shouldn't push too
    > >hard.
    > > > >
    > > > > Andrus
    > > > >
    > > > >
    > > > > > HI
    > > > > >
    > > > > > any body help me .
    > > > > > page reterives all the rows from the table.
    > > > > > see code below
    > > > > >
    > > > > >
    > >SelectQuery
    > > > > > cwDataQuery
    > > > > > = new
    > > > > > SelectQuery(cwClass);
    > > > > >
    > >cwDataQuery.addOrderings(cwObject.getViewOrderings());
    > > > > > //cwDataQuery.setFetchLimit(100);
    > > > > > cwDataQuery.setPageSize(25); //
    > >HERE I AM SETTING PAGE SIZE =25
    > > > > > BUT STILL ITS RETRIVING ALL THE ROWS FROM THE TABLE WHATS THE
    > > > > > PROBLEM
    > > > > >
    > > > > >
    > > > > > // Perform the query
    > > > > > List resultList =
    > >context.performQuery(cwDataQuery);
    > > > > > THANKS
    > > > > > SAMI
    > > > > >
    > > > > >
    > > > > >
    > > > > >
    > > > > >
    > > > >
    > > > >
    > > >
    > > > --
    > > > Joshua T. Pyle
    > > > Go has always existed.
    > > >
    > > >
    > >
    > >
    > >--
    > >Joshua T. Pyle
    > >Go has always existed.
    >
    >_________________________________________________________________
    >Express yourself instantly with MSN Messenger! Download today - it's FREE!
    >http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
    >

    _________________________________________________________________
    FREE pop-up blocking with the new MSN Toolbar - get it now!
    http://toolbar.msn.click-url.com/go/onm00200415ave/direct/01/



    This archive was generated by hypermail 2.0.0 : Sun Mar 06 2005 - 09:12:42 EST