- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在应用程序屏幕之间创建一个缓冲区。我想在 mainLayout 中创建一个缓冲区,但我无法从子层访问它
我试图通过'静态'来做到这一点,然后缓冲区对所有用户都是通用的,这是不正确的
Cookies也不适合,因为数据结构复杂
带有静态缓冲区的代码:
例子中创建了一个表,当你选择表中的元素时,将它们写入缓冲区,如果缓冲区中有元素,则在表中标记
主布局.java
public class MainLayout extends AppLayout implements RouterLayout {
public static Set<Test> buffer;
public MainLayout() {
buffer = new HashSet<Test>();
/*...*/
}
}
基本 View .java
@Route(value = "BasicView", layout = MainLayout.class)
@RouteAlias(value = "/BasicView", layout = MainLayout.class)
public class BasicView extends VerticalLayout {
private final Grid<Test> tests;
public BasicView(@Autowired TestService){
/*...*/
tests = new Grid<>(Test.class, false);
tests.addSelectionListener(event -> {
MainLayout.buffer = event.getAllSelectedItems();});
/*...*/
for(Test el : MainLayout.buffer)
{
tests.select(el);
}
/*...*/
}
}
最佳答案
您实际上可以遍历布局的父布局直到主布局。例如。你可以做下面的事情
Optional<Component> parent = this.getParent();
Buffer buffer = null;
while (parent.isPresent()) {
Component p = parent.get();
if (p instanceof MainLayout) {
MainLayout main = (MainLayout) p;
buffer = main.getBuffer();
}
parent = p.getParent();
}
但是我不确定这是否是最好的方法。如果您碰巧使用例如Spring Boot,将此缓冲区作为 VaadinSessionScoped bean 并在需要时 Autowiring 它会更自然。下一版本的 Vaadin 还将添加特定的 RouteScope,如果需要,它允许更精确的范围界定。
另请参阅有关此的旧 Vaadin 论坛讨论:https://vaadin.com/forum/thread/17917385/vaadin-14-accessing-components-of-mainview
关于java - Vaadin 从 RouterLayout 引用 mainLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67783918/
Blazor 应用程序:我有自定义页眉 Logo 和自定义页脚链接将根据输入参数 {id} 改变。 在查询中使用输入参数 ID 来检索公司 Logo ,并且来自数据库的页脚链接信息。 动态页眉和页脚是
我在 Blazor 服务器端应用程序的 MainLayout 中放置了一些全局 Blazor 组件。它们用于显示警报、确认、警告...... 如何从子组件获取对 MainLayout 的引用以调用我的
我需要在应用程序屏幕之间创建一个缓冲区。我想在 mainLayout 中创建一个缓冲区,但我无法从子层访问它 我试图通过'静态'来做到这一点,然后缓冲区对所有用户都是通用的,这是不正确的 Cookie
我有一个带有 MainLayout 的 Blazor 应用程序页面,其中有 @Body加载实际的页面内容。 就我而言 Index.razor加载在 MainLayout 内页。 有没有办法从位于父页面
在我的 Fragment 中,我没有返回相应 XML 文件的 View ,而是创建了一个布局并按如下方式向其添加 View ,然后返回该布局: LinearLayout firstLinearLayo
我想将 Layout Inflator 添加到我的主视图,但它没有添加。我的应用程序崩溃了。 这是我的代码: mainLayout = (LinearLayout) findViewById(R.id
我在我的一个项目中有以下内容 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bund
在 Blazor 的早期版本中,所有文件都是 cshtml 页面,并且能够使用类似于 MVC 项目的 _layout - 一切都很好。 但现在在新的 .NET Core 3.0 版本中,Blazor
给定一个“默认”Blazor 应用程序 - 使用 Visual Studio 2019 Blazor 服务器模板创建。如何创建可从所有 Razor 页面和组件访问的 GLOBAL 对象。 如何使“当前
我是一名优秀的程序员,十分优秀!