2012-04-10 24 views
1

私はAjaxfallbacktableに問題があります - pagenationがうまくいきます - データ読み込み - すべてが簡単です - でもデフォルトのソートが動作します - トンすべての列にアップダウンボタンを追加する方法を見つけ出す - とにかく私はここにここに が私のテーブルであるwicketで上/下の並べ替えが機能しない - AjaxFallBackTable

List<IColumn<logParsed>> columns = new ArrayList<IColumn<logParsed>>(); 

columns.add(new PropertyColumn<logParsed>(new Model<String>("Number of Entries"), "numberOfEntries") { 
    @Override 
    public String getCssClass() 
    { 
     return "numeric"; 
    } 
}); 
columns.add(new PropertyColumn<logParsed>(new Model<String>("Last Seen"), "lastSeen")); 
columns.add(new PropertyColumn<logParsed>(new Model<String>("Host Name"), "hostName") { 
    @Override 
    public String getCssClass() 
    { 
     return "hostname"; 
    } 
}); 
columns.add(new PropertyColumn<logParsed>(new Model<String>("Log Message"), "logMessage")); 


logProvider<logParsed> LogProvider = new logProvider<logParsed>(logParsedDao.findAll()); 
final AjaxFallbackDefaultDataTable<logParsed> dataTable = new AjaxFallbackDefaultDataTable<logParsed>("table", columns, 
     LogProvider, 10) { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected Item<logParsed> newRowItem(String id, int index, IModel<logParsed> model) { 
     return new OddEvenItem<logParsed>(id, index, model); 
    } 
}; 

/* add(new OrderByBorder("sortByHighest", "numberOfEntries", LogProvider) 
{ 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected void onSortChanged() 
    { 
     dataTable.setCurrentPage(0); 
    } 
}); */ 
add(dataTable); 

をしたい私は、テーブルを並べ替えることができるようにすることは、私のdataProviderです:

public class LogProvider<logParsed> extends SortableDataProvider{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private LogParsedDao logParsedDao; 





private List<logParsed> list = new ArrayList<logParsed>(); 

public LogProvider(List<logParsed> sentList){ 

    setSort("numberOfEntries",SortOrder.DESCENDING); 
    list = sentList; 
} 

public Iterator iterator(int first, int count) { 

    //ArrayList<logParsed> newList = (ArrayList<logParsed>) logParsedDao.findAll(); 
    //Collections.sort(newList, comparator); 
    Iterator<logParsed> iterator = null; 

    try { 
     if(getSort() != null) { 
      Collections.sort(list, new Comparator<logParsed>() { 
       private static final long serialVersionUID = 1L; 

        public int compare(logParsed sl1, logParsed sl2) { 
        int result=1; 
         PropertyModel<Comparable> model1= new PropertyModel<Comparable>(sl1, getSort().getProperty()); 
         PropertyModel<Comparable> model2= new PropertyModel<Comparable>(sl2, getSort().getProperty()); 

         if(model1.getObject() == null && model2.getObject() == null) 
          result = 0; 
         else if(model1.getObject() == null) 
          result = 1; 
         else if(model2.getObject() == null) 
          result = -1; 
         else 
          result = ((Comparable)model1.getObject()).compareTo(model2.getObject()); 

         result = getSort().isAscending() ? result : -result; 

         return result; 
       } 
      }); 
     } 

     if (list.size() > (first+count)) 
      iterator = list.subList(first, first+count).iterator(); 
     else 
      iterator = list.iterator(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return iterator; 

} 

public int size() { 
    // TODO Auto-generated method stub 
    return list.size(); 
} 

public IModel model(final Object object) { 
    return new AbstractReadOnlyModel<logParsed>() { 
     @Override 
     public logParsed getObject() { 
      return (logParsed) object; 
     } 
    }; 
} 

} 

答えて

4

ソートプロパティPropertyColumn(displayModel, sortProperty, propertyExpression)を受け取るPropertyColumnコンストラクタを使用します。

+0

ありがとうございます - columns.add(新しいPropertyColumn (新しいモデル( "最後に見た")、 "lastSeen"、 "lastSeen")); 私は上記のように変更し、それは魔法のように働いた –

関連する問題