Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧(靴)和;Vaadin-在Vaadin navigator中设置默认视图_Java_Spring_Spring Boot_Vaadin - Fatal编程技术网

Java 弹簧(靴)和;Vaadin-在Vaadin navigator中设置默认视图

Java 弹簧(靴)和;Vaadin-在Vaadin navigator中设置默认视图,java,spring,spring-boot,vaadin,Java,Spring,Spring Boot,Vaadin,首先,这里有一个简单的UI,它有一个addMenueItem()方法。此方法获取视图id并向菜单添加一个按钮,并告诉Vaadin的导航器在单击时导航到它: ......... @PostConstruct private void initPage() { navigator.addProvider(viewProvider); contentLayout.setSizeFull(); } protected void addMe

首先,这里有一个简单的UI,它有一个addMenueItem()方法。此方法获取视图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);
基于SpringURL的视图解析器现在从'DefaultView.view\uID'的值调用id。现在,我正在寻找一个好的解决方案,将给定的视图id不仅映射到“/view-id”,而且映射到应用程序根路径-->'/'

我怎样才能告诉Spring这个特殊的ViewID也是/VIEW-ID的根或同义词

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

提前谢谢


PS:我对spring和这类东西非常陌生,敬请原谅:D

导航器和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);
    }
}
说明:

大部分内容应该已经广为人知,因为这些是可以在多个教程中阅读的基础知识,例如:

简言之:

  • 您可以使用@SpringUI注释(默认情况下映射到/)来注册新的UI
  • 您可以自动连接自动注册视图的SpringViewProvider
  • 初始化导航器
要设置默认视图,只需初始化设置URI片段的NavigationStateManager。init方法完成后,UI类调用Navigator.navigateTo()方法,当前状态为NavigationStateManager

注意:您可能会在网络中找到如下内容:

navigator.navigateTo(DefaultView.VIEW_ID);

如果在UI的init方法中使用此选项,则会调用两次导航器。

简而言之,“(空字符串)与默认视图匹配,因为访问根路径时没有URI片段。您可以在中阅读有关导航器的更多信息,并可以找到有关vaadin&spring引导的教程。在vaadin spring 1.1中,导航器配置变得更简单,也许我们应该更新此答案?我举了一个示例,说明如何从1.0样式移动到1.1样式的导航器初始化:此解决方案会断开书签,因为导航状态始终设置为默认视图