-
1. Having multiple datagrids share the same state
meierhans Feb 14, 2011 7:32 AM (in response to meierhans)This is how I did it: I created a CustomSorter class like this:
public class CustomSorter
{
private Ordering columnFirstNameSortOrder = Ordering.UNSORTED;
private Ordering columnLastNameSortOrder = Ordering.UNSORTED;
private Collection<String> sortPriorities = new Vector<String>();
public void clearSort()
{
this.sortPriorities.clear();
this.setColumnFirstNameSortOrder(Ordering.UNSORTED);
this.setColumnLastNameSortOrder(Ordering.UNSORTED);
/* ... */
}
}
Then I bound my columns sortOrder attribute to these values and the sortPriority attribute of the grids to the sortPriorities member.
<rich:dataTable
id="aDataGrid1"
var="item"
value="#{bean.model}"
rows="#{bean.model.pageSize}"
sortMode="multi"
sortPriority="#{customSorter.sortPriorities}"
reRender="aDataGrid1, aDataGrid2, aDataGrid3"
>
<rich:column id="columnFirstName" sortable="true" sortBy="#{item.firstName}" sortOrder="#{customSorter.columnFirstNameSortOrder}" filterBy="#{item.firstName}" >
<f:facet name="header">
<h:outputText value="First Name" />
</f:facet>
<h:outputText value="#{item.firstName}" />
</rich:column>
<rich:column id="columnLastName" sortable="true" sortBy="#{item.lastName}" sortOrder="#{customSorter.columnLastNameSortOrder}" filterBy="#{item.lastName}" >
<f:facet name="header">
<h:outputText value="Last Name" />
</f:facet>
<h:outputText value="#{item.lastName}" />
</rich:column>
</rich:dataTable>
This works! The solution was simple. I dunno why I tried so hard before.