Hi Jeff,
I found another approach to maintain the page the user is at.  I am using
the actionListener attribute of the dataScroller.
In my xhtml page I have the following:

*************************XHTML CODE PORTION*****************************
                                <t:dataScroller id="scroll_1"
for="resultsData" fastStep="#{searchResultsBean.fastStep}"
                                        pageCountVar="pageCount"
pageIndexVar="pageIndex"
                                        styleClass="scroller"
paginator="true" paginatorMaxPages="#{searchResultsBean.paginatorMaxPages}"
                                        paginatorTableClass="paginator"
        
paginatorActiveColumnStyle="font-weight:bold;" 
                                        immediate="false" 
                                        rowsCountVar="totalRows"
        
firstRowIndexVar="currentPageFirstRow"
                                        lastRowIndexVar="currentPageLastRow"
                                        renderFacetsIfSinglePage="false"
actionListener="#{searchResultsBean.paginatorAction}">
                                        <h:outputFormat value="Rows {0}-{1}
of {2}" style="align:center">
                                                <f:param
name="mycurrentPageFirstRow" value="#{currentPageFirstRow}"/>
                                                <f:param
name="mycurrentPageLastRow" value="#{currentPageLastRow}"/>
                                                <f:param name="mytotalRows"
value="#{totalRows}"/>
                                        </h:outputFormat>
                                        <f:facet name="first">
                                                <t:graphicImage
url="/pages/images/arrow-first.gif" style="border:1px"
rendered="#{!searchResultsBean.firstPage}"/>
                                        </f:facet>
                                        <f:facet name="last">
                                                <t:graphicImage
url="/pages/images/arrow-last.gif" style="border:1px"
rendered="#{!searchResultsBean.lastPage}"/>
                                        </f:facet>
                                        <f:facet name="previous">
                                                <t:graphicImage
url="/pages/images/arrow-previous.gif" style="border:1px"
rendered="#{!searchResultsBean.firstPage}"/>
                                        </f:facet>
                                        <f:facet name="next">
                                                <t:graphicImage
url="/pages/images/arrow-next.gif" style="border:1px"
rendered="#{!searchResultsBean.lastPage}"/>
                                        </f:facet>
                                        <f:facet name="fastforward">
                                                <t:graphicImage
url="/pages/images/arrow-ff.gif" style="border:1px"
rendered="#{!searchResultsBean.lastPage}"/>
                                        </f:facet>
                                        <f:facet name="fastrewind">
                                                <t:graphicImage
url="/pages/images/arrow-fr.gif" style="border:1px"
rendered="#{!searchResultsBean.firstPage}"/>
                                        </f:facet>
                                </t:dataScroller> 

****************************************************************************
In the managed bean I have the following relevant code:

**************************MANAGED BEAN CODE PORTION*************************
    private final static int DEFAULT_ROWS = 2;
    private final static int PAGINATOR_MAX_PAGES = 5;
    private final static int PAGINATOR_FAST_STEP = 5;
    private int rowIndex = 0;
    private int rowsPerPage = DEFAULT_ROWS;     

public void paginatorAction(ActionEvent event) {
                ScrollerActionEvent scrollerAction = (ScrollerActionEvent)
event;
                String clickedFacet = scrollerAction.getScrollerfacet();
                int pageClicked = scrollerAction.getPageIndex();
                //Means a facet was clicked
                if (clickedFacet != null) {
                        if (clickedFacet.equals("next")) {
                                rowIndex = rowIndex + rowsPerPage;
                        } else if (clickedFacet.equals("previous")) {
                                rowIndex = rowIndex - rowsPerPage;
                        } else if (clickedFacet.equals("first")) {
                                rowIndex = 0;
                        } else if (clickedFacet.equals("last")) {
                                rowIndex = _rowData.getRowCount() -
rowsPerPage;
                        } else if (clickedFacet.equals("fastrewind")) {
                                rowIndex = rowIndex -
PAGINATOR_FAST_STEP*rowsPerPage;
                                if (rowIndex < 0) {
                                        rowIndex = 0;
                                }
                        } else if (clickedFacet.equals("fastforward")) {
                                rowIndex = rowIndex +
PAGINATOR_FAST_STEP*rowsPerPage;
                                if (rowIndex >= _rowData.getRowCount()) {
                                        rowIndex = _rowData.getRowCount() -
rowsPerPage;
                                }
                        }
                } else {
                //Means a pageNumber was clicked
                        rowIndex = pageClicked*rowsPerPage - rowsPerPage;
                }
        }
        
    public int getRowIndex() {
        return rowIndex;
    }

    public int getRowsPerPage() {
        return SearchResultsBean.DEFAULT_ROWS;
    }
    
    public boolean isFirstPage() {
        return (rowIndex < rowsPerPage);
    }

    public boolean isLastPage() {
        return (rowIndex >=  (_rowData.getRowCount() - rowsPerPage));
    }
    
    public int getFastStep() {
        return SearchResultsBean.PAGINATOR_FAST_STEP;
    }
    
    public int getPaginatorMaxPages() {
        return SearchResultsBean.PAGINATOR_MAX_PAGES;
    }

****************************************************************************

The most important method here is:  paginatorAction which captures all
scrollerActionEvents and according to the type of element clicked (either a
facet or a specific page) it displaces the rowIndex variable accordingly.  

Also, I added conditional rendering to the facets based on whether the user
is at the first or last page.  If the user is at the first page there´s no
need to include first, previous and fastrewind facets and if the user is at
the last page there´s no need to include last, next and fastforward facets.

I haven´t included anything yet in the wiki but if you guys think this can
be helpful information to others then let me know and I´ll add it to the
wiki.

Regards,
JV

-----Mensaje original-----
De: Jorge Vásquez [mailto:[EMAIL PROTECTED] 
Enviado el: martes, 21 de noviembre de 2006 16:21
Para: 'MyFaces Discussion'
Asunto: RE: Accessing datascroller paginator variables

Thanks a lot Jeff.  Excelent document!!  My problem is that I am not using
command Links to view the details.  I have context menus for each row that
are built using the jscookMenu component.  I think that I should take a
closer look at the second approach that you suggest.
Thanks again,
JV
  

-----Mensaje original-----
De: Jeff Bischoff [mailto:[EMAIL PROTECTED] 
Enviado el: martes, 21 de noviembre de 2006 11:15
Para: MyFaces Discussion
Asunto: Re: Accessing datascroller paginator variables

Jorge,

I have contributed a wiki page [1] with my take on solving this 
scenario. Please let me know if anything is lacking, or feel free to 
edit the wiki yourself. :)

[1] http://wiki.apache.org/myfaces/ManagingDataScrollerPage

Regards,

Jeff Bischoff
Kenneth L Kurz & Associates, Inc.

Jorge Vásquez wrote:
> Hi list,
> 
> I am using dataScroller for paginating a list.  I would like to have
access
> to the current page in the bean in order to load it whenever a user
returns
> to a list that was previously loaded.  My scenario is the user is loading
a
> set of detail pages and when he/she comes back to the list it isn´t
loading
> the page that he/she was at prior to going to the detail pages.  So I was
> thinking if I can keep the current page in the bean but continue using
> datascroller since I don´t want to reimplement all the pagination logic
that
> this component already provides.
> 
>  
> 
> Thanks,
> 
> JV
> 
> 

Reply via email to