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 sh开发者_StackOverfloweet 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? ;)
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).
精彩评论