Vaadin 7 - 设置并获取VaadinSession属性

时间:2013-03-27 10:28:05

标签: authentication attributes vaadin

我目前正在使用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");

但它获得空值。

有谁知道为什么?我感谢任何帮助。

谢谢。

3 个答案:

答案 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()函数中用户字符串的标签,否则请处理它。