extendedDataTableModel update
hypnosat7 Nov 3, 2010 10:53 AMHello,
I'm facing some problems when trying to update an ExtendedTableDataModel. In fact I'm trying to refresh a list of flights after adding a new one.
When I save the new flight, it is added in the database but the extendedDataTable is not refreshed.
So the code in my jsp for refreshing an extendedDataTable is:
<a4j:commandButton action="#{flightsController.save}" value="Save" reRender="formTableFlight"> </a4j:commandButton>
And the 'save' method in my controller :
public String save() { for (Company c : companies) { if(companyName.equals(c.getName())) company = c; } flight.setCompany(company); flightsService.add(flight); flights.add(flight); form.setRendered(false); addCommand.setRendered(true); return null; }
The extendedDataTable is declared as follows :
<h:form binding="#{flightsController.formTableFlight}" id="formTableFlight"> <rich:extendedDataTable value="#{flightsController.extendedTableDataModel}" var="flight" selection="#{flightsController.selectionFlight}" id="tableFlight" sortMode="single" selectionMode="single" width="500px" height="200px"> <f:facet name="header"> <h:outputText value="Flight" /> </f:facet> <rich:column sortable="false" label="Code" id="col_code"> <f:facet name="header"> <h:outputText value="Code" id="code" /> </f:facet> <h:outputText value="#{flight.id}" id="flight_id" /> </rich:column> <rich:column sortable="true" label="Departure" id="col_departure"> <f:facet name="header"> <h:outputText value="Departure" id="departure" /> </f:facet> <h:outputText value="#{flight.departure}" /> </rich:column> <rich:column sortable="true" label="Departure" id="col_destination"> <f:facet name="header"> <h:outputText value="Destination" id="destination" /> </f:facet> <h:outputText value="#{flight.destination}" /> </rich:column> <rich:column sortable="false" label="actions" id="col_actions"> <f:facet name="header"> <h:outputText value="Actions" id="actions" /> </f:facet> <h:panelGrid columns="1"> <h:commandLink value="delete" action="#{flightsController.delete}"> <f:setPropertyActionListener target="#{flightsController.flight}" value="#{flight}" /> </h:commandLink> </h:panelGrid> </rich:column> <a4j:support reRender="tableStep" action="#{flightsController.takeSelection}" event="onselectionchange" id="table_takeSelection" /> </rich:extendedDataTable>
The extendedDataTableModel is initialized by this code :
private List<Flight> flights = flightsService.getFlights(); public ExtendedTableDataModel<Flight> getExtendedTableDataModel() { if(extendedTableDataModel == null) { extendedTableDataModel = new ExtendedTableDataModel<Flight>(new DataProvider<Flight>() { /** * */ private static final long serialVersionUID = -776297803803735490L; public Flight getItemByKey(Object key) { for(Flight c : flights){ if (key.equals(getKey(c))){ return c; } } return null; } public List<Flight> getItemsByRange(int firstRow, int endRow) { return flights.subList(firstRow, endRow); } public Object getKey(Flight item) { return item.getId(); } public int getRowCount() { return flights.size(); } }); } return extendedTableDataModel; }
Thanks for help