我想在Vaadin中创建一个简单的HTML表,但是组件已经不存在了(以前是可用的com.vaadin.ui.Table)。该表用于显示网格中选择的项的详细属性(键值对)。
我可以使用什么Vaadin流组件来实现这一点?为什么首先在Vaadin Flow中删除了表?
发布于 2021-12-20 09:34:05
表实际上已经在Vaadin8中删除了。https://vaadin.com/blog/-/blogs/mission-rip-table-migrate-to-grid-intro
要在流中实现表,有几种选择。一个是使用元素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);
}
}发布于 2021-12-23 06:19:44
表组件可以有多个用例。在Vaadin的社区组件目录中有几个替代方案。
https://vaadin.com/directory/component/beantable
https://vaadin.com/directory/component/html-table
由于这些使用程序非常不同,所以不同的Java更适合它们,尽管它们生成的HTML DOM结构非常相似。这两个附加组件都没有尝试复制Vaadin 7 Table组件的API。
https://stackoverflow.com/questions/70419130
复制相似问题