views:

69

answers:

1

I have created a Java webapplication containing a tobago sheet. I am now trying to override the sorting mechanism of the sheet by using the sortActionListener attribute.

When I click on a column my sorting method is started. I can read out the column name and do some SQL stuff to get the data I would like to display now. The sorting is done due to the SQL query. The problem is, that the sheet won't display the data, it's empty.

This is the error message I get:

org.apache.myfaces.custom.ajax.api.AjaxPhaseListener - Found component is no ajaxComponent

Has anybody an idea how to solve this? Does my sheet have to be something like ajax-enabled or what is wrong?

Thanks in advance!

UPDATE:

I have found out that the error message is due to a conflict between the tomahawk-sandbox library and tobago. After removing the sandbox lib, the error message disappears. Nevertheless I am still having problems with the view.

In case I step over the event handler manually everything works fine, since the jsp page will be reloaded after the eventhandler. This is perfect. BUT if I run the code on its own without performing a manual step over, the jsp page is NOT reloaded and therefore I can't see the data.

Why is this so and how can I persuade my code to refresh the jsp page and therefore the sheet? ;)

A: 

In order to show up the results it is neccessary to interact with the sheet itself - which somehow makes sense ;)

List<SheetData> sheetData = (List<SheetData>) sheet.getValue();

... performing SQL query ...

sheetData = sqlresult;

That's all ;) Get the value of the sheet, perform the SQL query and send the result to the sheetData object. The sheet will be refreshed when it's finished.

But I decided to get rid of the SQL query since it takes a lot of time (very huge and complex database, don't ask ...). I am now going the standward way by creating a comparator.

Comparator<SheetData> comparator = null;

comparator = new Comparator<SheetData> {

    public int compare(SheetData sd1, SheetData sd2) {

        int rc = 0;

        if (rc == 0) {
            rc = sd1.getString("Field").compareTo(sd2.getString("Field"));
        }

        if (rc == 0) {
            rc = sd1.getString("Field2").compareTo(sd2.getString("Field2"));
        }

        return rc;
    }
};

Collections.sort(sheetData, comparator);

The comparator can sort as many fields as I want and its fast ;) You can also see the sheet's state (ascending/descending) within the sortcolumn, which won't be shown with my first approach (SQL query).

Marcus