我目前正在使用Vaadin 7创建RIA,而我正在设计登录功能。
应用程序设计很简单:
UI类执行不同查看类的导航。特别是,第一个显示的View是一个LoginView类,在用户通过身份验证后,UI类将用户重定向到MainView。
认证后,我想将用户数据(例如姓名和姓氏)设置到会话中,并在Web应用程序的右上角始终显示它(无论具体视图如何)。
作为一个初学者,我读了Vaadin书,我首先使用了第11章https://vaadin.com/book/-/page/advanced.global.html中所示的方案,但它似乎没有按预期工作,可能是因为我使用的是View导航方案。
所以我使用以下方法:
验证正确完成后,LoginView会尝试将用户数据存储为VaadinSession属性,并使用以下代码:
VaadinSession.getCurrent().setAttribute("name", name);
然后UI导航到MainView并尝试使用以下命令获取用户的名称:
VaadinSession.getCurrent().getAttribute("name");
但它获得空值。
有谁知道为什么?我感谢任何帮助。
谢谢。
答案 0 :(得分:1)
我建议将值存储在HTTP会话中。
VaadinServletService.getCurrentServletRequest().getSession().setAttribute("name", name);
和
VaadinServletService.getCurrentServletRequest().getSession().getAttribute("name");
答案 1 :(得分:0)
在扩展UI的主类上使用@PreserveOnRefresh批注。 然后,您可以将变量数据存储在主类中。 您可以使用((MyUIClass)UI.getCurrent())。getSomeVariable方法表达式从任何地方(在任何视图中)提供它。
答案 2 :(得分:0)
我猜你为什么得到你的空值。在现代Vaadin的大多数教程中,导航页面在UI中作为对象首先创建。如果在此过程中实例化的其中一个视图是MainView。如果显示名称的标签在类的构造函数中设置String,则为:
label.setValue(VaadinSession.getCurrent().setAttribute("name", name));
将为null,该属性尚未由登录功能设置。
您需要更新显示@override enter()
函数中用户字符串的标签,否则请处理它。