Java 弹簧(靴)和;Vaadin-在Vaadin navigator中设置默认视图
首先,这里有一个简单的UI,它有一个addMenueItem()方法。此方法获取视图id并向菜单添加一个按钮,并告诉Vaadin的导航器在单击时导航到它: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
.........
@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
- 初始化导航器
navigator.navigateTo(DefaultView.VIEW_ID);
如果在UI的init方法中使用此选项,则会调用两次导航器。简而言之,“(空字符串)与默认视图匹配,因为访问根路径时没有URI片段。您可以在中阅读有关导航器的更多信息,并可以找到有关vaadin&spring引导的教程。在vaadin spring 1.1中,导航器配置变得更简单,也许我们应该更新此答案?我举了一个示例,说明如何从1.0样式移动到1.1样式的导航器初始化:此解决方案会断开书签,因为导航状态始终设置为默认视图