jakarta-ee - 如何在 Vaadin 中将 ItemSorter 添加到表容器?

标签 jakarta-ee sorting containers vaadin

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

容器类。

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 格式。

请提供正确的解决方案...

Sort vaadin Table 相关

提前致谢。

最佳答案

BeanItemContainer 已经准备好轻松设置 ItemSorter 的一切。 您可以使用此功能:

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

例如,您可以将 sortByDate() 函数添加到容器中来执行此操作。这里是三个示例类。

bean :

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

关于jakarta-ee - 如何在 Vaadin 中将 ItemSorter 添加到表容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074056/

相关文章:

jakarta-ee - 为什么 J2EE 名称中有第二个?

c++ - 如何在 C++ 中创建一个包含不同类型函数指针的容器?

c++ - Qt 容器类的通用搜索算法

c++ - 使用对索引的右值引用,有什么好处吗?

php - 使用php获取字符串中第一个大写字母的位置

java - 简单的JSP文件无法显示简单的自定义标签

mysql - 从 <p :selectOneMenu> using jsf2 中的数据库填充数据

hibernate - 在 JPQL 中,如何访问命名参数的属性?

Ruby 数组排序

sorting - Redis:获取相对于排序集中给定元素的前n个元素