【发布时间】:2022-01-21 21:52:51
【问题描述】:
我想在 Vaadin 流程中创建一个简单的 HTML 表格,但该组件不再存在(以前以 com.vaadin.ui.Table 的形式提供)。该表旨在显示在 Grid 中选择的项目的详细属性(键值对)。
我可以使用什么 Vaadin Flow 组件来实现这一点?为什么首先在 Vaadin Flow 中删除了表格?
【问题讨论】:
标签: html-table vaadin vaadin-flow vaadin14
我想在 Vaadin 流程中创建一个简单的 HTML 表格,但该组件不再存在(以前以 com.vaadin.ui.Table 的形式提供)。该表旨在显示在 Grid 中选择的项目的详细属性(键值对)。
我可以使用什么 Vaadin Flow 组件来实现这一点?为什么首先在 Vaadin Flow 中删除了表格?
【问题讨论】:
标签: html-table vaadin vaadin-flow vaadin14
表格实际上已经在 Vaadin8 中被删除。 https://vaadin.com/blog/-/blogs/mission-rip-table-migrate-to-grid-intro
要在 Flow 中实现表格,有几个选择。 一种是使用Element API,一种是为表格创建组件。
对于元素 API 版本,它可能类似于:
Element table = new Element("table");
For(item : item rows to add) {
Element tr = new Element("tr");
table.appendChild(tr);
For(int i = 0; i < dataColumns; i++) {
Element td = new Element("td");
// could perhaps append a span with text context.
td.setText(item text for column i);
tr.appendChild(td);
}
}
对于组件方法,基本情况可能是将这 3 个元素实现为:
@Tag("table")
public class Table extends Component implements HasComponents {
public Row addRow() {
Row row = new Row();
add(row);
return row;
}
public Row getRow(int row) {
final Optional<Component> rowOptional = getElement().getChild(row)
.getComponent();
if(rowOptional.isPresent())
return (Row) rowOptional.get();
return null;
}
}
@Tag("tr")
public class Row extends Component {
public void add(Cell cell) {
getElement().appendChild(cell.getElement());
}
public int getRow() {
return getElement().getParent().indexOfChild(getElement());
}
}
@Tag("td")
public class Cell extends Component {
public int getCol() {
return getElement().getParent().indexOfChild(getElement());
}
public int getRow() {
return ((Row) getParent().get()).getRow();
}
public void setText(String text) {
getElement().setText(text);
}
}
【讨论】:
Table 组件可以有多个用例。 Vaadin 的社区组件目录中有几个替代方案。
https://vaadin.com/directory/component/beantable
https://vaadin.com/directory/component/html-table
由于这些用例完全不同,它们由不同的 Java API 更好地满足,尽管它们产生的 HTML DOM 结构非常相似。这些插件都没有尝试重现 Vaadin 7 Table 组件的 API。
【讨论】: