【问题标题】:Spring(-Boot) & Vaadin - Set default-view in Vaadin navigatorSpring(-Boot) & Vaadin - 在 Vaadin 导航器中设置默认视图
【发布时间】:2015-10-10 21:57:29
【问题描述】:

首先我在这里有一个简单的 UI,它有一个 addMenueItem() 方法。此方法获取 view-id 并向菜单添加一个按钮,并告诉 Vaadin 的导航器在单击时导航到它:

.........
    @PostConstruct
    private void initPage() {
        navigator.addProvider(viewProvider);
        contentLayout.setSizeFull();
    }

    protected void addMenuItem(final String viewId) {
        final String postfix;
        if (viewId == null || viewId.trim().isEmpty()) {
            postfix = "";
        } else {
            postfix = "." + viewId;
        }
        final String name = messageByLocaleService.getMessage(I18N_PREFIX + postfix);
        menue.addItem(name, menueCommand -> getUI().getNavigator().navigateTo(viewId));
    }
.........

所以我从我的 MainUI 添加了一些视图,例如:

addMenuItem(DefaultView.VIEW_ID);

基于 Spring url 的视图解析器现在从“DefaultView.VIEW_ID”的值调用 id。现在我正在寻找一个很好的解决方案,将给定的 view-id 不仅映射到“/VIEW-ID”,而且映射到应用程序根路径-->“/”。

我如何告诉 Spring 这个特殊的 ViewID 也是 /VIEW-ID 的根或同义词?

当然有可能在某种 Tomcat 的 xml 文件或其他东西中对其进行硬编码,但我想动态地这样做。

提前致谢

PS:我对spring和这种东西很陌生,请礼貌:D

【问题讨论】:

  • 简而言之,""(空字符串)匹配默认视图,因为在访问根路径时没有 URI 片段。您可以在vaadin bookin the vaadin wiki 中阅读有关导航器的更多信息,您可以找到有关 vaadin 和 spring boot 的教程。

标签: java spring spring-boot vaadin


【解决方案1】:

导航器和 URI 片段齐头并进。根路径没有任何 URI 片段,因此导航器在调用 URL 时不知道导航到哪里。

你可以像这样在你的 UI 类中解决这个问题:

@SpringUI
public class MainUI extends UI {
    @Autowired
    SpringViewProvider viewProvider;

    @Override
    protected void init(VaadinRequest request){
        Navigator navigator = new Navigator(this,this);
        navigator.addProvider(viewProvider);
        this.setNavigator(navigator);

        // Set default view
        NavigationStateManager stateManager = new Navigator.UriFragmentManager(getPage());
        stateManager.setState(DefaultView.VIEW_ID);
    }
}

说明:

大部分内容应该是众所周知的,因为这些是可以在多个教程中阅读的基础知识,例如:III Views and Navigation with Vaadin Spring

简而言之:

  • 您使用默认映射到 /@SpringUI 注释来注册新 UI
  • 您自动装配 SpringViewProvider,它会自动注册您的视图。
  • 您初始化导航器。

要设置默认视图,您只需初始化设置 URI 片段的 NavigationStateManager。一旦 init 方法完成,UI 类将使用 NavigationStateManager 的当前状态调用 Navigator.navigateTo() 方法。

注意:您可能会在网上找到类似的内容:

navigator.navigateTo(DefaultView.VIEW_ID);

如果你在 UI 的 init 方法中使用它,你的导航器会被调用两次。

【讨论】:

  • 在 Vaadin Spring 1.1 Navigator 配置变得有点简单,也许我们应该更新这个答案?我做了这个例子,如何从 1.0 风格移动到 1.1 风格的导航器初始化:github.com/mstahv/vaadin-spring-navigation-example/commit/…
  • 此解决方案会破坏书签,因为导航状态始终设置为默认视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多