@ManagedBean
@ViewScoped
public class DataTableBacking implements Serializable {
private static final long serialVersionUID = 1715081848553221866L;
@ManagedProperty(value = "#{customerService}")
private transient CustomerService customerService;
private List<Customer> customerDataModel;
private DataModel<Customer> customerOnDemandDataModel;
private int rowsPerPage = 10;
private List<Customer> selectedCustomers;
private String selectionMode = "checkbox";
private String summaryPosition = "bottom";
public void determineSelectedCustomers(ActionEvent actionEvent) {
FacesContext facesContext = FacesContext.getCurrentInstance();
selectedCustomers = new ArrayList<Customer>();
UICommand commandButton = (UICommand) actionEvent.getSource();
DataTable customerDataTable = (DataTable) commandButton.findComponent("customers");
String selectedRowIndexes = customerDataTable.getSelectedRowIndexes();
if ((selectedRowIndexes != null) && (selectedRowIndexes.length() > 0)) {
int originalRowIndex = customerDataTable.getRowIndex();
String[] selectedRowIndexArray = selectedRowIndexes.split(",");
StringBuilder facesMessageText = new StringBuilder();
for (String selectedRowIndex : selectedRowIndexArray) {
int rowIndex = Integer.parseInt(selectedRowIndex);
customerDataTable.setRowIndex(rowIndex);
Customer customer = (Customer) customerDataTable.getRowData();
selectedCustomers.add(customer);
if (facesMessageText.length() > 0) {
facesMessageText.append(", ");
}
facesMessageText.append(customer.getFirstName());
facesMessageText.append(" ");
facesMessageText.append(customer.getLastName());
}
if (facesMessageText.length() > 0) {
FacesMessage facesMessage = new FacesMessage(facesMessageText.toString());
facesContext.addMessage(null, facesMessage);
}
customerDataTable.setRowIndex(originalRowIndex);
}
else {
FacesMessage facesMessage = new FacesMessage("No Customers Selected");
facesContext.addMessage(null, facesMessage);
}
}
public List<Customer> getCustomerDataModel() {
if (customerDataModel == null) {
customerDataModel = customerService.getAllCustomers();
}
return customerDataModel;
}
public DataModel getCustomerOnDemandDataModel() {
if (customerOnDemandDataModel == null) {
customerOnDemandDataModel = new CustomerOnDemandDataModel(getRowsPerPage());
}
return customerOnDemandDataModel;
}
public int getRowsPerPage() {
return rowsPerPage;
}
public List<Customer> getSelectedCustomers() {
return selectedCustomers;
}
public String getSelectionMode() {
return selectionMode;
}
public String getSummaryPosition() {
return summaryPosition;
}
public void modeSwitch(ValueChangeEvent valueChangeEvent) {
UISelectOne selectOneMenu = (UISelectOne) valueChangeEvent.getSource();
DataTable customerDataTable = (DataTable) selectOneMenu.findComponent("customers");
customerDataTable.setSelectedRowIndexes(null);
}
public void rowDeselectListener(AjaxBehaviorEvent ajaxBehaviorEvent) {
RowDeselectEvent rowDeselectEvent = (RowDeselectEvent) ajaxBehaviorEvent;
addFacesMessage(rowDeselectEvent, rowDeselectEvent.getRowIndex(), (Customer) rowDeselectEvent.getRowData());
}
public void rowDeselectRangeListener(AjaxBehaviorEvent ajaxBehaviorEvent) {
RowDeselectRangeEvent rowDeselectRangeEvent = (RowDeselectRangeEvent) ajaxBehaviorEvent;
addFacesMessage(rowDeselectRangeEvent, rowDeselectRangeEvent.getRowIndexes(),
rowDeselectRangeEvent.getRowDataList());
}
public void rowSelectListener(AjaxBehaviorEvent ajaxBehaviorEvent) {
RowSelectEvent rowSelectEvent = (RowSelectEvent) ajaxBehaviorEvent;
addFacesMessage(rowSelectEvent, rowSelectEvent.getRowIndex(), (Customer) rowSelectEvent.getRowData());
}
public void rowSelectRangeListener(AjaxBehaviorEvent ajaxBehaviorEvent) {
RowSelectRangeEvent rowSelectRangeEvent = (RowSelectRangeEvent) ajaxBehaviorEvent;
addFacesMessage(rowSelectRangeEvent, rowSelectRangeEvent.getRowIndexes(), rowSelectRangeEvent.getRowDataList());
}
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
public void setRowsPerPage(int rowsPerPage) {
this.rowsPerPage = rowsPerPage;
}
public void setSelectionMode(String selectionMode) {
this.selectionMode = selectionMode;
}
public void setSummaryPosition(String summaryPosition) {
this.summaryPosition = summaryPosition;
}
protected void addFacesMessage(FacesEvent facesEvent, int rowIndex, Customer customer) {
FacesContext facesContext = FacesContext.getCurrentInstance();
StringBuilder messageText = new StringBuilder();
messageText.append("Received ");
messageText.append(facesEvent.getClass().getSimpleName());
messageText.append(" for rowIndex=[");
messageText.append(rowIndex);
messageText.append("] customer=[");
messageText.append(customer.getFirstName());
messageText.append(" ");
messageText.append(customer.getLastName());
messageText.append("] in the ");
messageText.append(facesEvent.getPhaseId().toString());
messageText.append(" phase.");
FacesMessage facesMessage = new FacesMessage(messageText.toString());
facesContext.addMessage(null, facesMessage);
}
protected void addFacesMessage(FacesEvent facesEvent, int[] rowIndexes, List<Object> customerList) {
FacesContext facesContext = FacesContext.getCurrentInstance();
StringBuilder messageText = new StringBuilder();
messageText.append("Received ");
messageText.append(facesEvent.getClass().getSimpleName());
messageText.append(" for rowIndexes=");
messageText.append(Arrays.toString(rowIndexes));
if (customerList != null) {
messageText.append(" Customers=[");
for (int i = 0; i < customerList.size(); i++) {
if (i > 0) {
messageText.append(", ");
}
Customer customer = (Customer) customerList.get(i);
messageText.append(customer.getFirstName());
messageText.append(" ");
messageText.append(customer.getLastName());
}
messageText.append("]");
}
messageText.append(" in the ");
messageText.append(facesEvent.getPhaseId().toString());
messageText.append(" phase.");
FacesMessage facesMessage = new FacesMessage(messageText.toString());
facesContext.addMessage(null, facesMessage);
}
}