2

我有一个从 BeanItemContainer 扩展的 Container 类。我想将 ItemSorter 添加到 DATE_CREATED 属性以按降序对值进行排序。

容器类。

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_CREATEDjava.util.Date格式。

请提供适当的解决方案...

排序 vaadin 表相关

提前谢谢。

4

1 回答 1

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 });
}
}

测试界面:

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() 函数后添加的 Items 不排序。如果您希望在每次插入后对项目进行排序,您可以覆盖 addItem() 函数,以便它们在添加项目后调用 sort()。

于 2013-04-22T11:36:37.537 回答