EntityQuery ajax pagination
dsmith1 Feb 19, 2007 3:49 PMHas anyone gotten EntityQuery to work with AJAX pagination? Right now the only way I can get it to work is by putting the EntityQuery component in CONVERSATION scope.
When it isn't in CONVERSATION scope it will not work properly. I can page forward through the list and back through list. But after I leave the first page I can't ever go back to it using repeated clicks of "Previous Page" or clicking "First Page" Also, I can not access the last page of the list though repeated clicking of "Next Page" or clicking "Last Page"
In both the First Page and Last Page not displaying, I can tell from the debug statements that the query is getting executed with the correct firstResult and returning the correct data. But the page does not update.
I don't see why I'd have to put the EntityQuery into CONVERSATION scope
non working example
components.xml
-------------------
<framework:entity-query name="testCodeListQuery" ejbql="select c from TestCode c" max-results="5"/>
view.xhtml
-------------
<div id="register"><h:form id="testCodes" styleClass="register"> <h:dataTable id="codeList" var="code" value="#{testCodeList.resultList}"> <h:column> <f:facet name="header"> <h:outputText value="Code" /> </f:facet> <h:outputText value="#{code.name}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Desc" /> </f:facet> <h:outputText value="#{code.desc}"/> </h:column> </h:dataTable> <a:commandButton value="First Page" reRender="testCodes" disabled="#{!testCodeList.previousExists}"> <a:actionparam name="firstResult" value="0"/> </a:commandButton> <a:commandButton value="Previous Page" reRender="testCodes" disabled="#{!testCodeList.previousExists}"> <a:actionparam name="firstResult" value="#{testCodeList.previousFirstResult}"/> </a:commandButton> <a:commandButton value="Next Page" reRender="testCodes" disabled="#{!testCodeList.nextExists}"> <a:actionparam name="firstResult" value="#{testCodeList.nextFirstResult}"/> </a:commandButton> <a:commandButton value="Last Page" reRender="testCodes" disabled="#{!testCodeList.nextExists}"> <a:actionparam name="firstResult" value="#{testCodeList.lastFirstResult}"/> </a:commandButton> </h:form></div>
Paging Bean
--------------
@Name("testCodePaginatior") public class TestCodePaginatior implements Serializable { @Logger private Log log; @In("#{testCodeListQuery}") private EntityQuery testCodeListQuery; @Out private EntityQuery testCodeList; @RequestParameter("firstResult") private Integer firstResult; @Factory("testCodeList") public void init() { this.testCodeList = testCodeListQuery; int index = 0; if(this.firstResult != null){ index = firstResult; } testCodeList.setFirstResult(index); log.debug("paging '#0' with firstResult = '#1'",this.testCodeList, this.firstResult); } }
working example, but conversation scope
Paging Bean
--------------
@Name("testCodePaginatior") public class TestCodePaginatior implements Serializable { @Logger private Log log; @In("#{testCodeListQuery}") private EntityQuery testCodeListQuery; @In(required=false)@Out(scope=ScopeType.CONVERSATION) private EntityQuery testCodeList; @RequestParameter("firstResult") private Integer firstResult; public void page(){ log.debug("paging '#0' with firstResult = '#1'",this.testCodeList, this.firstResult); int index = 0; if(this.firstResult != null){ index = firstResult; } testCodeList.setFirstResult(index); testCodeList.refresh(); } @Factory("testCodeList") public void init() { this.testCodeList = testCodeListQuery; int index = 0; if(this.firstResult != null){ index = firstResult; } testCodeList.setFirstResult(index); log.debug("initing '#0' with firstResult = '#1'",this.testCodeList, this.firstResult); }
view.xhtml
-------------
<div id="register"><h:form id="testCodes" styleClass="register"> <h:dataTable id="codeList" var="code" value="#{testCodeList.resultList}"> <h:column> <f:facet name="header"> <h:outputText value="Code" /> </f:facet> <h:outputText value="#{code.name}"/> </h:column> <h:column> <f:facet name="header"> <h:outputText value="Desc" /> </f:facet> <h:outputText value="#{code.desc}"/> </h:column> </h:dataTable> <a:commandButton value="First Page" action="#{testCodePaginatior.page}" reRender="testCodes" disabled="#{!testCodeList.previousExists}"> <a:actionparam name="firstResult" value="0"/> </a:commandButton> <a:commandButton value="Previous Page" action="#{testCodePaginatior.page}" reRender="testCodes" disabled="#{!testCodeList.previousExists}"> <a:actionparam name="firstResult" value="#{testCodeList.previousFirstResult}"/> </a:commandButton> <a:commandButton value="Next Page" action="#{testCodePaginatior.page}" reRender="testCodes" disabled="#{!testCodeList.nextExists}"> <a:actionparam name="firstResult" value="#{testCodeList.nextFirstResult}"/> </a:commandButton> <a:commandButton value="Last Page" action="#{testCodePaginatior.page}" reRender="testCodes" disabled="#{!testCodeList.nextExists}"> <a:actionparam name="firstResult" value="#{testCodeList.lastFirstResult}"/> </a:commandButton> </h:form></div>