- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Vaadin 14。我有一个网格向用户展示。另外,我有一个按钮来创建和保存新用户。我的 MainGrid 如下所示:
public class MainView extends VerticalLayout {
private final UserService userService;
private final AddUserDialog addUserDialog;
private Grid<UserDto> grid;
public MainView(UserService userService,
AddUserDialog addUserDialog) {
this.userService = userService;
this.addUserDialog = addUserDialog;
}
@PostConstruct
private void renderComponents() {
renderAddUserButton();
renderUserGrid();
}
private void renderAddUserButton() {
Button addUserButton = new Button("Добавить", VaadinIcon.PLUS.create());
addUserButton.addClickListener(event -> addUserDialog.open());
add(addUserButton);
}
private void renderUserGrid() {
grid = new Grid<>(UserDto.class);
//grid init here
add(grid);
}
}
对话框如下所示:
public class AddUserDialog extends Dialog {
private final UserService userService;
public AddUserDialog(UserService userService) {
this.userService = userService;
}
@PostConstruct
public void init() {
//init form here
}
private void save(Binder<UserDto> binder) {
UserDto userDto = new UserDto();
try {
binder.writeBean(userDto);
} catch (ValidationException e) {
e.printStackTrace();
}
userService.save(userDto);
this.close();
}
}
请问,关闭对话框后如何刷新网格?
最佳答案
在这种情况下,最好将所有逻辑保留在主视图中。如果您的主视图和对话框都独立更新数据,则很容易出现数据不一致的情况。
我的建议是,您更改对话框以在保存用户时触发已保存事件,并在主视图中监听该事件并相应地更新它。这样,您只需将 View 状态维护在一处。
public class AddUserDialog extends Dialog {
private void save(Binder<UserDto> binder) {
UserDto userDto = new UserDto();
try {
binder.writeBean(userDto);
fireEvent(new SaveEvent(this, userDto));
} catch (ValidationException e) {
e.printStackTrace();
}
}
public static abstract class UserDialogEvent extends ComponentEvent<AddUserDialog> {
private UserDto userDto;
protected UserDialogEvent(AddUserDialog source, UserDto userDto) {
super(source, false);
this.userDto = userDto;
}
public UserDto getUserDto() {
return userDto;
}
}
public static class SaveEvent extends UserDialogEvent {
public SaveEvent(AddUserDialog source, UserDto userDto) {
super(source, userDto);
}
}
public <T extends ComponentEvent<?>> Registration addListener(Class<T> eventType,
ComponentEventListener<T> listener) {
return getEventBus().addListener(eventType, listener);
}
}
(如果您不需要取消等其他事件,则可以删除抽象事件类)
然后,在 MainView
中,监听事件并相应地更新状态。
public class MainView extends VerticalLayout {
private final UserService userService;
private final AddUserDialog addUserDialog;
private Grid<UserDto> grid;
public MainView(UserService userService) {
this.userService = userService;
addUserDialog = new AddUserDialog();
addUserDialog.addListener(AddUserDialog.SaveEvent.class, this::saveUser);
}
@PostConstruct
private void renderComponents() {
renderAddUserButton();
renderUserGrid();
}
private void renderAddUserButton() {
Button addUserButton = new Button("Добавить", VaadinIcon.PLUS.create());
addUserButton.addClickListener(event -> addUserDialog.open());
add(addUserButton);
}
private void renderUserGrid() {
grid = new Grid<>(UserDto.class);
//grid init here
add(grid);
}
private void saveUser(AddUserDialog.SaveEvent saveEvent) {
userService.save(saveEvent.getUserDto());
addUserDialog.close();
refreshGrid();
addUserDialog.addDialogCloseActionListener()
}
private void refreshGrid() {
// refresh grid
}
}
关于java - Vaadin 14 网格 + 对话框 : How to refresh grid after closing dialog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59603904/
使用的浏览器 - Chrome 67.0.3396.99 我创建了一个 DialogsModule它有一个组件 ConfirmDialog.component.ts使用以下模板 confirm-dia
我一直在尝试制作一个简单的程序来使用Electron创建和读取文件。 到目前为止,我已经尝试了很多,并且似乎没有提供与dialog.showOpenDialog一起提供的回调函数。 dialo
我有一个登录对话框,想防止它在按下回车键时自动关闭。 更具体地说,当用户输入凭据并按下回车键时,凭据的响应返回错误,我希望对话框保留(这样我就可以向他们显示一些错误消息,让用户再试一次) . 这就是我
Jquery对话框的含义是什么:它是单独的网页还是网页的一部分? (我不太了解 Jquery)。 谢谢 最佳答案 jQuery 对话框将出现在页面上方,但它实际上是当前页面的一部分。当您加载对话框时,
当用户退出 xe:dialog 时,我需要做一些清理工作。我将代码放在 onUnload 事件中,如下所示: viewScope.remove("vsSomeVariable"); viewScope
我想相对于我的 html 元素之一定位 Dojo 的 Dijit 对话框。是否可以? 如是。如何? 目前它总是在视口(viewport)中间显示对话框。 有人可以帮我解决这个问题吗? 谢谢。 amar
即使属性设置为“openDirectory”,是否也可以在 showOpenDialog 中显示文件?当然,文件不应该是可选的,但可能会显示为灰色。所以用户知道他选择了正确的目录。在 OSX 上一切正
如何使用 android 标准组件 Bottom Sheet 单实现以下设计功能: 出现 Bottom Sheet 对话框片段时的图像: 用户向上滚动以查看内容底部时的图像: 我将使用 ViewPag
我刚开始使用对话框,我非常喜欢在资源文件中定义布局的可能性。但是是否可以设置一个对话框并将其嵌入到另一个对话框中(即没有 float 对话框)? 对于普通窗口,我创建了一个带有一个子窗口的主窗口。然后
我正在尝试更改 dialog 的背景颜色元素的 backdrop使用自定义 CSS 属性,但不需要。这是 Chrome 中的错误还是有原因? document.querySelector('dialo
我有一个 Electron 应用程序。如果我通常使用dialog.showmessageBoxSync,则必须等待用户输入。选项为:关闭,取消或确定。 它工作正常,但是如果我在对话框外部(应用程序内的
我有一个启动确认对话框的 View ,但代码不是等待对话框返回结果,而是直接跳转到 promise 的“then”部分。请参阅下面的代码: ConfirmDialog.ts import { inje
我有一个启动确认对话框的 View ,但代码不是等待对话框返回结果,而是直接跳转到 promise 的“then”部分。请参阅下面的代码: ConfirmDialog.ts import { inje
我正在使用 MonoTouch.Dialog 的 OwnerDrawnElement,但它似乎不允许用户在触摸屏幕时“突出显示”单元格。我查看了示例,但它没有显示突出显示。有什么建议么? 我注意到 T
此选择器在 http://jqueryui.com/demos/dialog/#modal-confirmation 中引用(源代码)。 $( "#dialog:ui-dialog" ).dialog
我有一个奇怪的问题。当 Activity 开始时,我会显示一个对话框,说明某些项目正在加载,如下所示: Dialog dialog; @Override public void onCreate(Bu
jquery-ui 中 .dialog("close") 和 .dialog("destroy") 有什么区别? 我有一个脚本,以前的开发人员使用了 .dialog("destroy") 但现在我必须
我正在使用 Acengage (Ad4Push),我想自定义它的对话框。 Acengage 团队说可以使用自定义主题更改对话框样式,我做到了。我可以更改 textSize、textColor、wind
我有一个标准 View ,顶部有一个导航栏。我还在它自己的源文件中设置了一个 Monotouch.Dialog。我四处寻找解决方案,但似乎找不到关于如何将 MTD 添加到普通 View 的明确答案。
我试图从一个打开的 md-dialog 中打开一个 md-dialog,但问题是第一个 md-dialog 在第二个打开时关闭了 // the controller of the first popU
我是一名优秀的程序员,十分优秀!