-
1. Re: DataTable, how to fire action on sort
janson12 Oct 17, 2008 4:17 AM (in response to james.holder3)Hi,
as i couldn't find any event either i made a property binding to rich:column. Each time you sort a column its getters and setters are called.
for the pagination thing you can use the page-attribute which you reset to 1 in ur bean after a specific action. however the page will probably only rerender after an action-method call... -
2. Re: DataTable, how to fire action on sort
james.holder3 Oct 17, 2008 2:29 PM (in response to james.holder3)I tired something similar to:
public class GuiStateBean implements Serializable { private HtmlColumn sortColumn = new HtmlColumn(); public HtmlColumn getSortColumn() { logger.debug("Getting the sortColumn"); return uicSearchUicColumn; } public void setSortColumn(HtmlColumn uicSearchUicColumn) { logger.debug("Setting the sortColumn"); this.uicSearchUicColumn = uicSearchUicColumn; } }
and in my page<rich:datatable> <rich:column id="uic" sortBy="#{my.string}" binding="#{guiState.sortColumn}" > <f:facet name="header"> <h:outputText id="Header" value="sort Me"> </f:facet> <h:outputText value="#{my.string}"/> </rich:column> </rich:datatable>
Thinking from the previous posters description, that these getters might be called whenever the table is sorted. However that does not appear to be the case.....
Does anyone know of any to call a server side method from the gui to shortcircuit this issue with the pagination and sorting?
I think that resetting the lists pagination onSort should be the default behavior, or at the very least, very simple for the user to implement. Something like actionOnSort="#{my.stringMethod}" -
3. Re: DataTable, how to fire action on sort
james.holder3 Oct 17, 2008 2:34 PM (in response to james.holder3)I tired something similar to:
public class GuiStateBean implements Serializable { private HtmlColumn sortColumn = new HtmlColumn(); public HtmlColumn getSortColumn() { logger.debug("Getting the sortColumn"); return sortColumn; } public void setSortColumn(HtmlColumn sortColumn) { logger.debug("Setting the sortColumn"); this.sortColumn = sortColumn; } }
and in my page<rich:datatable> <rich:column id="uic" sortBy="#{my.string}" binding="#{guiState.sortColumn}" > <f:facet name="header"> <h:outputText id="Header" value="sort Me"> </f:facet> <h:outputText value="#{my.string}"/> </rich:column> </rich:datatable>
Thinking from the previous posters description, that these getters might be called whenever the table is sorted. However that does not appear to be the case.....
Does anyone know of any to call a server side method from the gui to shortcircuit this issue with the pagination and sorting?
I think that resetting the lists pagination onSort should be the default behavior, or at the very least, very simple for the user to implement. Something like actionOnSort="#{my.stringMethod}" -
4. Re: DataTable, how to fire action on sort
james.holder3 Oct 20, 2008 10:04 AM (in response to james.holder3)Anyone? I'm still trying to figure out some workaround for this. Basically, if the table is sorted, i want to reset to the pagination to the first page. Resetting the pagination is hte easy part, I need to figure out how to attach somethign that will call that event when the table is sorted.
Any help at all would be appreciated. -
6. Re: DataTable, how to fire action on sort
james.holder3 Oct 20, 2008 2:42 PM (in response to james.holder3)Thanks Konstantin.
Can you think of any way to pseudo implement this functionality? -
7. Re: DataTable, how to fire action on sort
nbelaevski Oct 21, 2008 6:24 AM (in response to james.holder3)What about model bean setters for sort mode/priority? You can try to use them.
-
8. Re: DataTable, how to fire action on sort
james.holder3 Oct 22, 2008 9:57 AM (in response to james.holder3)So far, the closest thing I've been able to come up with is to have my table in an a4j:region, and to utilize an ajaxListener to catch the ajax sorts. The caveats there are that in order for it to work, no other AJAX calls, other than the sort, can be fired inside the table.
I'm thinking there must be some way to differentiate between a sort call, and a form update call. I'm just not sure how that would be achieved.
Anyone have a better idea? -
9. Re: DataTable, how to fire action on sort
james.holder3 Oct 24, 2008 10:03 AM (in response to james.holder3)All,
I've been trying to figure out some way to get this behavior to work in some fashion, and this has been the best I've been able to come up with. The problem is, there are intermittent issues where a columns data will disappear, or the data will be there but not the header text (but the arrows will be), or the entire table itself will not be there and I'll get a message saying that no element with an id of examples can be found on the page... Is there anything in the following code that I should be aware of that would cause these problems?
(I only put in the "relevant" code, accessors and mutators are as you would expect. The driving is a standard ArrayList, that is generated on the first access, and just returned unchanged otherwise.)
GuiStateBeanprivate HtmlDataTable exampleTable; private HtmlDatascroller exampleTableScroller; private Integer exampleTablePage; public void exampleTableReset(){ logger.info("Resetting: "+ getClass().getName()+".exampleTableReset()"); logger.info("The page was: "+this.exampleTableScroller.getPage()+". Resetting to page 1."); this.exampleTableScroller.setPage(1); }
table.xhtml<h:form> <a4j:jsFunction name="resetScroller" action="#{guiState.exampleTableReset}" eventsQueue="exampleQueue"/> <a4j:status for="exampleTable" onstart="showToaster('Updating table.')" onstop="hideToaster();"/> <a4j:region id="exampleTable" > <a4j:outputPanel ajaxRendered="true"> <rich:dataTable var="item" value="#{example.examplesAsList}" id="examples" rows="10" binding="#{guiState.exampleTable}" > <rich:column id="fname" sortBy="#{item.firstName}"> <f:facet name="header"> <a4j:outputPanel onclick="resetScroller();"> <h:outputText id="fnameHeader" value="First Name" /> </a4j:outputPanel> </f:facet> <h:outputText value="#{item.firstName}" /> </rich:column> <rich:column id="lname" sortBy="#{item.lastName}"> <f:facet name="header"> <a4j:outputPanel onclick="resetScroller();"> <h:outputText id="lnameHeader" value="Last Name"/> </a4j:outputPanel> </f:facet> <h:outputText value="#{item.lastName}"/> </rich:column> <rich:column id="age" sortBy="#{item.age}"> <f:facet name="header"> <a4j:outputPanel onclick="resetScroller();"> <h:outputText id="ageHeader" value="Age"/> </a4j:outputPanel> </f:facet> <h:outputText value="#{item.age}"/> </rich:column> <rich:column id="phone" sortBy="#{item.phoneNumber}"> <f:facet name="header"> <a4j:outputPanel onclick="resetScroller();"> <h:outputText id="phoneHeader" value="Phone Number"/> </a4j:outputPanel> </f:facet> <h:outputText value="#{item.phoneNumber}"/> </rich:column> </rich:dataTable> </a4j:outputPanel> </a4j:region> <a4j:outputPanel ajaxRendered="true"> <rich:datascroller reRender="examples" id="exampleDataScroller" eventsQueue="exampleQueue" binding="#{guiState.exampleTableScroller}" page="#{guiState.exampleTablePage}" for="examples" immediate="true" /> </a4j:outputPanel> </h:form>