2013-04-18 41 views
2

我有一個從BeanItemContainer擴展的Container類。我想添加一個ItemSorter到DATE_CREATED屬性以降序排序值。如何添加ItemSorter到Vaadin中的表格容器?

容器類。

public class NoteContainer extends BeanItemContainer<CaseNote> implements Serializable 
{ 
    private static final long serialVersionUID = -5926608449530066014L; 

    public static final String DATE_CREATED = "dateCreated"; 
    public static final String CREATED_BY = "createdBy"; 
    public static final String TEXT = "text"; 
    public static final String ACTION = "Action"; 

    public static final Object[] NATURAL_COL_ORDER = new Object[] { 
     ACTION, DATE_CREATED, CREATED_BY, TEXT 

    }; 

    public static final String[] COL_HEADERS_ENGLISH = new String[] { 
     "ACTION", "Date Created/Updated", "Created/Updated By", "Note" 
    }; 

    /** 
    * Default Constructor. 
    * 
    */ 
    public NoteContainer() 
    { 
     super(CaseNote.class); 
    } 
} 

CaseNote是一個實體類,那DATE_CREATED內部處於java.util.Date格式。

請提供一個妥善的解決辦法...

提前與Sort vaadin Table

感謝名單。

回答

4

BeanItemContainer已經準備好了一切可以輕鬆設置ItemSorter的東西。 您可以使用此功能:

public void sort(Object[] propertyId, boolean[] ascending) 

因此,例如,你可以添加一個sortByDate()函數來你的容器來做到這一點。這裏有三個示例類。

豆:

public class CaseNote { 
private static final Random R = new Random(); 
private static final long Y_IN_MILLIES = 1000l * 60l * 60l * 24l * 365l; 
private Date dateCreated = new Date(System.currentTimeMillis() - Math.round(R.nextDouble() * Y_IN_MILLIES)); 

private String text = UUID.randomUUID().toString(); 

public String getText() { 
    return text; 
} 

public Date getDateCreated() { 
    return dateCreated; 
} 
} 

容器:

public class NoteContainer extends BeanItemContainer<CaseNote> { 

public NoteContainer() { 
    super(CaseNote.class); 
} 

public void sortByDate() { 
    sort(new String[] { "dateCreated" }, new boolean[] { false }); 
} 
} 

測試UI:

public class TestUI extends UI { 

@Override 
protected void init(VaadinRequest request) { 
    NoteContainer nc = new NoteContainer(); 
    for (int i = 0; i < 10; i++) { 
     nc.addItem(new CaseNote()); 
    } 
    nc.sortByDate(); 

    for (int i = 0; i < 10; i++) { 
     nc.addItem(new CaseNote()); 
    } 

    Table t = new Table("MyTable", nc); 
    setContent(t); 
} 
} 

注:調用sortByDate()函數後添加的項目是沒有排序。如果要在每次插入後對項目進行排序,則可以覆蓋addItem()函數,以便在添加項目後調用sort()。

+0

thanx很多。你的回答非常有用。再一次非常感謝你。 – ssdehero 2013-04-30 05:24:15

+0

謝謝你,很好的例子! – cgew85 2014-12-18 13:43:08

相關問題