当您在 Vaadin v21 中创建网格组件并切换到多选模式时,顶部会有一个“全选”复选框。如何禁用它?网格的默认行为似乎不同,因此 Vaadin 版本之间的解决方案也不同。
Grid<Person> grid = new Grid<>(Person.class, false);
grid.setSelectionMode(Grid.SelectionMode.MULTI);
grid.setItems(personRepository.findAll());
Run Code Online (Sandbox Code Playgroud) 例如,如何减少以下 HorizontalLayout 中按钮之间的间距:
代码:
HorizontalLayout horizontalLayout = new HorizontalLayout();
horizontalLayout.setWidthFull();
horizontalLayout.setJustifyContentMode(JustifyContentMode.END);
buttons.forEach(button -> {
horizontalLayout.add(button);
horizontalLayout.addThemeVariants(ButtonVariant.LUMO_SMALL);
});
Run Code Online (Sandbox Code Playgroud)
** 适用于 Vaadin Flow (Vaadin 14+)
在我的 Vaadin 应用程序中,我显示了Grid带有自定义类的项目Transaction。该网格的行为应如下所示:
Transaction当前行的项目执行一些代码。在这里,一个简单的Notification.show().我设法用以下代码来实现这一点:
private final Grid<Transaction> transactionGrid = new Grid<>(Transaction.class, false);
transactionGrid.setItems(transactionService.getItems());
transactionGrid.addColumn(getActionsRenderer()).setHeader("Actions").setAutoWidth(true);
private ComponentRenderer<Icon, Transaction> getActionsRenderer() {
final Icon replyIcon = new Icon(VaadinIcon.ENVELOPE);
return new ComponentRenderer<>(transaction -> {
replyIcon.addClickListener(event -> Notification.show(transaction.getOrderNumber()));
return replyIcon;
});
}
Run Code Online (Sandbox Code Playgroud)
单击该图标会显示一条带有交易的通知orderNumber。问题如下:
该应用程序还提供了一个“重新加载”按钮,它的作用与此类似:
refreshIcon.addClickListener(event -> {
final List<Transaction> transactions = transactionService.getItems();
transactionGrid.setItems(transactions);
});
Run Code Online (Sandbox Code Playgroud)
单击刷新图标后,单击该行replyIcon会显示相同数据的三个通知。下次刷新后,它会显示五个,然后是七个,依此类推。
因此,看起来好像每次刷新都会添加两个任何“组件”,它们都注册相同的点击侦听器。调试时,我可以看到有多个ClickEvent,eventBus但我不知道它们来自哪里。
如何在从另一个视图触发事件的视图中添加侦听器?
看法:
fireEvent(new SelectionEvent(this, false));
Run Code Online (Sandbox Code Playgroud)
应用程序布局:
addListener(AnotherView.SelectionEvent.class, e -> setTabsEnabled(true));
Run Code Online (Sandbox Code Playgroud)
View 将 AppLayout 作为路由目标组件的父组件。
事件已触发,但侦听器未收到事件来执行表达式。当两者在同一视图中执行但不分开时,此模式效果很好。
在 Vaadin 14 中,我使用 Vaadin Designer 添加了 Uploader 组件。效果很好。但是,我不知道如何清除以前上传的文件。我试过:
multiFileMemoryBuffer.getFiles().clear();
Run Code Online (Sandbox Code Playgroud)
但它没有做任何事情。当使用 Vaadin Designer 创建组件时,是否有办法清除 Vaadin 14 中的 Uploader 组件中先前上传的文件?
我喜欢Vaadin 详细信息组件。但看起来它总是预先渲染的。是否可以将Details组件变成延迟加载模式?
我想在用户展开面板时呈现详细信息内容。可以用Details组件来实现吗?如果不是,可以使用什么来实现这种行为?
我有这样的瓦丁观点:
@Route()
@JavaScript(value="scripts/print.js")
public class PrintableView extends BaseView {
@Override
public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
super.setParameter(event, parameter);
}
@Override
protected void onAttach(AttachEvent attachEvent) {
UI.getCurrent().getPage().executeJs("printWhenLoaded($0);",".layout");
}
}
Run Code Online (Sandbox Code Playgroud)
以及 JavaScript 导入:
function printWhenLoaded(selector) {
setTimeout(function () {
var e = document.querySelector(selector);
if(e && e.innerHTML.length) {
window.print();
window.close();
}
else printWhenLoaded(selector)
}, 200)
};
//printWhenLoaded('.layout');
Run Code Online (Sandbox Code Playgroud)
导入成功加载(最终),因为当我取消注释最后一行时,它起作用了。但是,当尝试从 onAttach 方法调用它时,我在浏览器控制台中看到一个错误,指出“printWhenLoaded”未定义。
看来在 onAttach 时,JS 文件实际上还没有被浏览器加载。
我有一个简单的代码,点击按钮后模仿数据处理:
@Route("long")
public class LongWait extends VerticalLayout {
public LongWait() {
Button processButton = new Button("Process");
processButton.addClickListener(event -> process());
add(processButton);
}
//imitates processing data:
//should sleep for 10 minutes and then add "finished" label
//instead loose connection after 5 minutes
private void process() {
try {
Thread.sleep(10 * 60 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
add(new Label("finished"));
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 - 在"处理"5分钟后浏览器与服务器松散连接.
为什么会发生这种情况以及如何避免它?
(我真的需要处理大量数据.)
Vaadin:10.0.3
Tomcat:9.0.8
Java:1.8.0_162
UPD:
之后process()方法已经完成它的工作(经过10分钟),我有以下的日志错误:
java.lang.UnsupportedOperationException: Confirmed duplicate message from the …Run Code Online (Sandbox Code Playgroud) 我需要处理一些数据并在网页上显示处理日志。(大约300行文字)。
我试图使用标签。最初,它工作正常-页面变得可滚动,并且所有文本都可以看到。但是大约100个标签后,页面变得没有响应。
如何管理这项任务?
(我尝试在webcomponents.org上寻找其他组件,但找不到任何东西。)
Vaadin 文档声明它支持Select使用Java 调用的组件.
你怎么访问它?我找不到任何相应的课程.甚至它的安装部分都没有提到它.
vaadin ×10
vaadin-flow ×10
vaadin-grid ×2
vaadin10 ×2
html-select ×1
java ×1
vaadin14 ×1
vaadin21 ×1
vaadin23 ×1