I've been struggling with the jquery datatable.  I've been on this thread
with some server side pagination and sorting:  
http://tapestry.1045711.n5.nabble.com/ANN-JumpStart-gets-jQuery-DataTables-example-td5715816.html
<http://tapestry.1045711.n5.nabble.com/ANN-JumpStart-gets-jQuery-DataTables-example-td5715816.html>
  

I've got that working-ish.  My code correctly interprets what tapesty and
the jquery tapestry code tells me is the sort column and order.  However,
what tapestry is telling me and what jquery is sending don't match.

If I render my page then select a column heading to sort by, jquery
recognizes it, tapesty tells me, and all is good.  If I then click "Next" or
another page number, tapestry reverses the sort.  If I click next again,
tapestry again reverses the sort, back to the original.

However, if click a column heading to sort by, wait for that page to
(correctly) render, then refresh my browser page, I can then click forward
and backward to my heart's content and the sort order remains constant and
correct.

Here, I think, is the relevent got5 code, with some comments of mine inline.
DefaultDataTable
        public void prepareResponse(GridDataSource source){

                String sortingCols =
request.getParameter(DataTableConstants.SORTING_COLS);

                if(InternalUtils.isNonBlank(sortingCols)){
                        int nbSortingCols = Integer.parseInt(sortingCols);
        
                        String sord = 
request.getParameter(DataTableConstants.SORT_DIR+"0");
        
                        String sidx = 
request.getParameter(DataTableConstants.SORT_COL+"0");
        
                        /// nbSortingCols is, in fact, greater than zero. 
jquery sent "iSortingCols    1".  I assume this means we are sorting on one,
and only one, column/
                        if(nbSortingCols>0)
                        {
                                List<String> names = model.getPropertyNames();
        
                                int indexProperty = Integer.parseInt(sidx);
        
                                String propName = names.get(indexProperty);
        
                                ColumnSort colSort 
=sortModel.getColumnSort(propName);
        
                                sortModel.updateSort(propName);  /// <-- This 
guy reverses the sort./
                        }
                }

        }

AbstractTable
                public void updateSort(String columnId) {
                        assert InternalUtils.isNonBlank(columnId);
                        if (columnId.equals(sortColumnId)) {  /// If we're 
sorting on this
column, reverse the sort/
                                setSortAscending(!getSortAscending());
                                return;
                        }

                        sortColumnId = columnId;
                        setSortAscending(true);
                }

I understand that this code is reversing the sort if jquery sends
iSortingCols with a value of greater than zero.  However, the jquery
documentation indicates that it *is* going to send that if we're sorting on
something:  /The following information is sent to the server for each draw
request. Your server-side script must use this information to obtain the
data required for the draw." and it includes iSortingCols in that list./  
Relevent jquery page <http://datatables.net/usage/server-side>  

I do not understand why refreshing the browser page stops this behavior.

More importantly, I don't know what I should to get it to behave correctly
without the browser refresh.  Thank you in advance for your help.

Matt




--
View this message in context: 
http://tapestry.1045711.n5.nabble.com/Jquery-Datatable-ajax-d-sort-reverses-tp5719457.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to