2012-04-21 2 views
1

Я планирую реализовать сортировку на сервере и просмотр подкачки для таблицы данных, которая будет показана на веб-странице. Таблица данных - это таблица HTML, управляемая Javascript, с внешним CSS. Данные будут вытаскиваться с серверной стороны Ajax. Я думаю о создании класса на стороне сервера для представления таблицы данных, но не знаю, как реализовать сортировку по разным столбцам. Сортировка должна быть достаточно общей для любого класса, который поддерживает таблицу.Как реализовать сортировку на стороне сервера в таблице данных

Edit: резервный класс, например, как это:

public class Inventory 
{ 
    private int itemsLeft = 0; 
    private float price = 0.0f; 
    private boolean status = false; 
    private int itemsSold = 0; 

    public int getItemsSold() 
    { 
     return itemsSold; 
    } 
    public void setItemsSold(int itemsSold) 
    { 
     this.itemsSold = itemsSold; 
    } 
    //... and other getters and setters 
} 

Каждый из частной области будет один из столбца для таблицы данных и всей таблицы будут представлены как ArrayList Описи. Каждый экземпляр класса резервной копии состоит из одной строки таблицы базы данных.

При нажатии заголовка любого сортируемого столбца индекс или имя столбца будут отправляться на сервер для сортировки данных в соответствии с выбранным столбцом.

Я теперь зациклился на том, как сделать общую функцию сортировки для любого резервного класса. Ваши предложения будут высоко оценены.

+0

Можете ли вы предложить код? – andersoj

+0

@andersoj: добавлен пример кода и больше объяснений. – dragon66

+0

Не могли бы вы использовать заказ базы данных? –

ответ

1

Благодаря эмира и cuberoot, после некоторой работы, я, наконец, придумал это:

import java.util.Comparator; 
import java.lang.reflect.Method; 

public class ObjectComparator<T> implements Comparator<T>{ 

    private String field; 
    private String order; 
    private Method method; 
    private Class<T> cls; 

    public ObjectComparator(String field, String order, Class<T> c){ 
     this.field = field; 
     this.order = order; 
     this.cls = c; 
     init(); 
    } 

    private void init(){ 
     String field_name = "get"+field.substring(0,1).toUpperCase()+field.substring(1); 
     try{ 
      method = cls.getDeclaredMethod(field_name,new Class[]{}); 
     } 
     catch(Exception ex){ 
      System.err.println("No Such Method Found!"); 
     }   
    } 
    @SuppressWarnings("unchecked") 
    public int compare(T o1, T o2) { 
     try{  
      Object o1_ = method.invoke(o1,new Object[]{}); 
      Object o2_ = method.invoke(o2,new Object[]{}); 
      //Move all objects with null field values 
      //to the end of the list regardless of sorting order. 
      if(o1_== null) return 1; 
      else if(o2_== null) return -1; 
      ////////////////////////////////// 
      if (order.equalsIgnoreCase("asc"))     
       return ((Comparable<Object>)o1_).compareTo(o2_);  
      else 
       return ((Comparable<Object>)o2_).compareTo(o1_); 
     } 
     catch (Exception ex) 
     { 
      System.err.println("error sorting"); 
      return 0; 
     }   
    } 
} 

Это может быть использовано как:

List<Inventory> list = new ArrayList<Inventory>();//populate list  
Collections.sort(list, new ObjectComparator<Inventory>(field_name, order, Inventory.class)); 

Здесь field_name это имя поля сортироваться. Он отправляется на сервер в качестве параметра запроса при нажатии заголовка таблицы. Существует требование с таким подходом: все сортируемые поля в объекте домена должны реализовывать интерфейс Comparable. Также должны быть методы getter и setter для JavaBean для полей интересов.

1

Внесите различные Comparators для столбцов, которые вы хотите отсортировать. Затем вы можете использовать Collections.sort или аналогичный для сортировки на сервере.

+1

Итак, реализуйте компаратор, который работает отражением, и сортирует объекты по их полям. –

Смежные вопросы