3

我目前正在使用 Vaadin 7 创建 RIA,并且正在设计登录功能。

应用程序设计很简单:

UI 类在不同的View 类之间执行导航。特别是,第一个显示的 View 是 LoginView 类,在用户通过身份验证后,UI 类将用户重定向到 MainView。

身份验证后,我想将用户数据(例如姓名和姓氏)设置到会话中,并始终在 Web 应用程序的右上角显示它(无论是什么特定视图)。

作为一个初学者,我阅读了 Vaadin 书,我首先使用了第 11 章https://vaadin.com/book/-/page/advanced.global.html中说明的方案,但它似乎没有按预期工作,可能因为我正在使用查看导航方案。

所以我使用以下方法:

正确完成身份验证后,LoginView 尝试使用以下代码将用户数据存储为 VaadinSession 属性:

VaadinSession.getCurrent().setAttribute("name", name);

然后 UI 导航到 MainView 并尝试获取用户的名称:

VaadinSession.getCurrent().getAttribute("name");

但它得到一个空值。

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

谢谢你。

4

3 回答 3

1

我建议将值存储在 HTTP 会话中。

VaadinServletService.getCurrentServletRequest().getSession().setAttribute("name", name);

VaadinServletService.getCurrentServletRequest().getSession().getAttribute("name");
于 2016-11-28T08:58:01.997 回答
0

在扩展 UI 的主类上使用 @PreserveOnRefresh 注释。然后您可以将变量数据存储在主类中。您可以使用 ((MyUIClass)UI.getCurrent()).getSomeVariable 方法表达式从任何地方(在任何视图中)提供它。

于 2013-05-14T09:00:31.273 回答
0

我猜你为什么得到你的空值。在现代 Vaadin 的大多数教程中,导航页面首先在 UI 中作为对象创建。如果在此过程中实例化的这些视图之一是 MainView。如果显示名称的标签在类的构造函数中设置了字符串,则该行:

label.setValue(VaadinSession.getCurrent().setAttribute("name", name));如果登录功能尚未设置该属性,则将为 null。

您需要更新在 @overrideenter()函数中显示用户字符串的标签,或者以其他方式处理它。

于 2016-11-27T20:41:28.570 回答