总结
Grid → New & Amazing
Table → 尊敬的和可靠的
Table
是一个非常好的数据网格显示小部件,内置于Vaadin的最早版本中。
网格
是从头开始的大规模重写,旨在取代表。Vaadin团队正在利用他们从经验中获得的智慧,“如果我们当时知道我们现在所知道的”,以便在当今的Web技术中实现最好的数据网格。网格是一件大事,它有自己的虚荣页面。有关快速概述,请参阅此公司博客文章。
所以,一般来说,我建议你专注于Grid。尝试一下,先学习,看看它是否符合你的需求。如果遇到 bug 或问题,或者需要 Grid 中缺少的功能,请回退到 Table。您可以在项目中混合搭配两者,但需要注意的是,不同的外观和行为可能会使用户感到困惑。
将Grid想象成充满希望并渴望跃入成年期的早熟青少年,而Table则视为成熟的成年人,在中年的黄金时期努力工作,同时梦想着一个赚得盆满钵满的未来退休,驶向夕阳。
详
如果使用Vaadin 6,在一个持续的项目上,或者你需要支持非常旧的浏览器,那么这是你唯一的选择。 需要 Vaadin 7 或更高版本。Table
Grid
以下是 Grid 中目前缺少的一些主要表功能。
- 拖放功能(稍后添加)。
- 通过用户拖动列标题的边缘来调整列的大小。
两者共享许多功能。他们练习延迟加载到浏览器,仅在需要时从服务器端自动加载数据,以免Web浏览器过载。两者都允许用户拖动列以重新排序。两者都允许用户显示/隐藏列。
行选择
两者都允许选择单行或多行。
网格还具有自动功能,可在其中添加一列复选框。用户可以通过单击这些复选框而不是使用鼠标或鼠标+键盘来选择多行。许多(如果不是大多数)用户在鼠标驱动的多行选择方面都很笨拙。请参阅此屏幕截图,并注意第一列。
对选择的编程支持是不同的。Grid 不扩展 AbstractSelect
,而是定义自己的选择 API。调用 addSelectionListener()
并定义一个 SelectionListener
。参见瓦丁书。
页眉和页脚
两者都有页眉和页脚,但Grid有更多的选择。网格可以放置构件而不是文本。网格可以有多行标题。网格可以连接标题单元格,就像在 HTML 表中跨越一样。
就地编辑
两者都提供数据的就地编辑,但方式不同。表格允许编辑单元格中的数据。Grid采用了一种不同的方法,通过显示一个迷你窗口,一个小的数据输入表单来编辑整行。此表单包括一对确认和取消按钮。此表单比 Table 的单元格编辑要灵活得多。
滤波
Grid 提供用户控制的筛选,其中一行可输入单元格显示在标题下方。当用户键入时,将应用筛选器以仅显示匹配的行。请参阅此屏幕截图。使用表,您需要创建某种用户界面并应用筛选。
由数据容器提供支持
更新:Vaadin 8带来了新版本的Grid,它利用了新改进和大大简化的数据模型。这是使用网格而不是表的主要原因。请注意,原始网格和表格仍然可以通过Vaadin 7兼容层在Vaadin 8中使用。
以下旧信息完好无损...
Table 和 Grid 都是一个仅表示的小部件,由一个单独的数据对象支持,该对象根据 Vaadin 数据模型实现容器
接口。
Table 类还充当容器,这总是让我感到困惑。我很高兴看到Grid保持更清晰的明显分离。
与 Table 一样,Grid 确实为快速和肮脏的情况提供了一些方便的方法,在这些情况下,您希望在不正式生成容器的情况下向 Grid 本身抛出一些数据。但是 Grid 的便利方法使用行和列术语,而不是容器的项和属性项。这些术语更清楚地表明,您正在与网格通信,但网格正在代表您对其默认附加的索引容器
实例执行操作。
单元格内容
更新:在Vaadin 8.1中,Grid获得了在单元格中显示组件的能力。观看组件渲染器的实时演示。
单元格内容处理是不同的。网格不能直接显示列图标,也不能将组件(构件)放在单元格中。而是使用了新的渲染器
功能。
Doc & Demo
两者在《瓦丁之书》中都有一章,一章是关于表格的,一章是网格的。
两者都有现场演示。一个用于表(和树表)。还有一对网格,一个完整的窗口和一个各个方面。
请参阅此 Grid 手册页面,包括嵌入式实时演示,以及指向更多演示的链接。
其他差异
Grid 具有一个内置小部件,用于将数字显示为小温度计小部件。请参阅最后一列中的此屏幕截图。
有关更具体的差异,请参阅《Vaadin书》第5.24.1节概述 - 与表格的差异。
Esoterica...Grid是Vaadin Components中的第一个组件,Vaadin Components是一组基于Google Polymer构建的高质量Web组件,可以与任何支持Web组件的框架一起使用。虽然Vaadin团队已经承诺在未来的几年内支持Table,但不要指望它会受到如此特别的关注。
瓦丁 8
在Vaadin 8.0和8.1中,Grid变得越来越好。主要增强功能包括:
- 与 Vaadin 8 中新增的更简单时尚的数据模型配合使用
- 传递要显示的实体集合
- 使用类型安全的 lambda 语法轻松定义列
grid.addColumn( Person::getFirstName ).setCaption( "First Name" );
- 现在更容易延迟加载数据,现在已经消失了:
Container
grid.setDataProvider( ( sortorder , offset , limit) -> service.findAll( offset , limit) , () -> service.count() );
- 能够显示 Vaadin 组件,而不仅仅是渲染器
- 通过 HTML5 定义的拖放支持进行拖放。
- 速度更快
表组件仍然可以通过Vaadin 8中的兼容性层获得,以继续使用Vaadin 7类。
前途
Vaadin团队对Grid有很好的计划,所以你在StackOverflow页面上读到的大部分内容都会改变。该团队将在未来几个月和几年内热切地添加功能,增强功能和错误修复。在 Grid 的短暂历史中,已经对 Grid 进行了许多增强,因此在阅读有关限制或缺少功能的旧文档时要小心 - 可能不再如此。
Grid是一个新的更强大的组件,它应该是Table的继承者(参见Table已经死了,Grid万岁)。因此,应该没有必要偏爱表格而不是网格。
以下是Vaadin aboout从Table迁移到Grid的系列文章中的第一篇:https://vaadin.com/blog/-/blogs/mission-rip-table-migrate-to-grid-basic
-
如何使用Java中的RESTful Web服务获取远程/客户端IP地址? 我已经在我的项目中编写了Rest Web服务。Web服务调用可能来自不同 machine.so 我需要通过REST Web服务找出IP地址。 从这个请求.getRemoteAddr()使用这个。 但是我不能使用getRemoteAddr()。因为我的请
-
从包含大量文件的zip文件中提取1文件的最快方法是什么? 我尝试了但它们也缺少一些东西。 LZMA SDK不提供一种如何使用的文档/教程,这非常令人沮丧。没有 javadoc。 虽然7z jbinding没有提供一种简单的方法来只提取1个文件,但是,它只提供了提取zip文件
-
输入/输出流在销毁时是否关闭? Java 中的 InputStreams 和 OutputStreams 是否在销毁时关闭()?我完全理解这可能是不好的形式(特别是在C和C++世界中),但我很好奇。 另外,假设我有以下代码: 无名的FileInputStream是否在p.load
-
Java 程序中的字符串大小是否有任何限制? 我有一个字符串定义为 字符串 xx 我可以分配的字符数是否有任何限制? 2) 我正在将用户输入分配给此字符串 xx。70%的人只说一个字。有时他们给出一个大句子,所以想知道可
-