Sorting doesn't affect session bean / isn't persistent
shino Mar 24, 2009 9:12 AMThis is my first post here so hi everyone!
I'm really new to richfaces and web app development in general, so please talk slowly and clearly ;-)
I have a problem regarding sorting of a multi-paged dataTable:
I'm using rich:dataTable together with rich:columns and rich:datascroller:
<h:form>
<rich:dataTable value="#{AddressesModel.addressesTableData}"
id="addressOverviewTable" var="address" columns="10"
headerClass="addressesTableHeader" rowClasses="oddRow,evenRow" rows="10" reRender="addressTableDS">
<rich:columns id="label#{index}" sortBy="#{address[index]}"
value="#{AddressesModel.addressesTableLabels}" var="label"
index="index">
<f:facet name="header">
<h:outputText value="#{label}" />
</f:facet>
<h:outputText value="#{address[index]}" />
</rich:columns>
<f:facet name="footer">
<rich:datascroller id="addressTableDS" for="addressOverviewTable" maxPages="10"/>
</f:facet>
</rich:dataTable>
</h:form>
When I click on the sorting Icon of a column-header, the data of the complete table is sorted and the current page is displayed correctly. However, when I use the datascroller to get to the next page, the original unsorted data shows up again. Perhaps this is the intended behavior, but what I actually want is this: http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?c=sorting&tab=usage
I think/hope I could get along on my own if only I could find the complete source for that demo. I downloaded GA 3.3.0 and (briefly) went through the samples but couldn't locate it.
So, how can I achieve this? What do I have to configure or implement in order make the tables changes made through sorting persist throughout the session?
Btw.Here's the configuration of my session bean, at the moment, I provide some testdata by manually filling an ArrayList in the init() method:
<managed-bean>
<managed-bean-name>AddressesModel</managed-bean-name>
<managed-bean-class>
test.addressbook.modelbean.AddressesModel
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>addressesTableLabels</property-name>
<list-entries>
<value-class>java.lang.String</value-class>
<value>#{msgs.referenceColumnHeader}</value>
<value>#{msgs.nameColumnHeader}</value>
<value>#{msgs.nameExtColumnHeader}</value>
<value>#{msgs.streetColumnHeader}</value>
<value>#{msgs.houseNoColumnHeader}</value>
<value>#{msgs.PostalCodeColumnHeader}</value>
<value>#{msgs.cityColumnHeader}</value>
<value>#{msgs.countryColumnHeader}</value>
<value>#{msgs.nonPublicColumnHeader}</value>
<value>#{msgs.adColumnHeader}</value>
</list-entries>
</managed-property>
</managed-bean>
public class AddressesModel implements Serializable{
private static final long serialVersionUID = -3032793308402273197L;
private ArrayList<String[]> addressesTableData;
private ArrayList<String> addressesTableLabels;
@PostConstruct
public void init(){
ArrayList<String[]> addresses = new ArrayList<String[]>();
String[] tmp = new String[]{"012139","Nintendo","GmbH","Geo-Strasse","4","Fr","76312","Paris","false","false"};
addresses.add(tmp);
//...if you don't mind, I will skip the rest of the Arrays here
this.addressesTableData = addresses;
}
public AddressesModel(){
}
public ArrayList<String> getAddressesTableLabels() {
return addressesTableLabels;
}
public void setAddressesTableLabels(ArrayList<String> addressesTableLabels) {
this.addressesTableLabels = addressesTableLabels;
}
public ArrayList<String[]> getAddressesTableData() {
return addressesTableData;
}
public void setAddressesTableData(ArrayList<String[]> addresses){
this.addressesTableData = addresses;
}
public void addAddress(String[] address) {
addressesTableData.add(address);
}
}
Thanks in advance for any advice on what I missed here ;-)
best regards
Chris
P.S.: what am I expected to do with the doc folder of the release archive? Whats wrong with plain .pdf's or a html-doc? =D