O'Reilly logo

JavaServer Faces by Hans Bergsten

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Sorting the Data

To sort the data, we first need to add a few more things to the ReportHandler class:

package com.mycompany.expense;

import java.util.Collections;
import java.util.Comparator;
...
public class ReportHandler {
    ...
    private static final Comparator ASC_TITLE_COMPARATOR = new Comparator( ) {
            public int compare(Object o1, Object o2) {
                String s1 = ((Report) o1).getTitle( );
                String s2 = ((Report) o2).getTitle( );
                return s1.compareTo(s2);
            }
        };

    private static final Comparator DESC_TITLE_COMPARATOR = new Comparator( ) {
            public int compare(Object o1, Object o2) {
                String s1 = ((Report) o1).getTitle( );
                String s2 = ((Report) o2).getTitle( );
                return s2.compareTo(s1);
            }
        };
    ...

A java.util.Comparator instance compares values, for instance, when sorting a collection. Its compare() method is called with the two objects to compare and returns a negative value if the first is less than the second, zero if they are equal, or a positive value if the first is greater than the second.

I create two static Comparator instances for each column: one for ascending order and one for descending order. I show you only the ones for the Title column here, but the others are identical (with the exception of which Report property they compare).

To sort the reports list, I add a sortReports() method:

 private void sortReports(List reports) { switch (sortBy) { case SORT_BY_TITLE: Collections.sort(reports, ascending ? ASC_TITLE_COMPARATOR : DESC_TITLE_COMPARATOR); break; case SORT_BY_OWNER: Collections.sort(reports, ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required