我知道调用 setAttribute (link),但是 getAttribute 呢?
它是否正确?
public Object getMyAttribute() {
return VaadinSession.getCurrent().getAttribute("myAttribute");
}
还是需要加锁?
public Object getMyAttribute() {
try {
VaadinSession.getCurrent().getLockInstance().lock();
return VaadinSession.getCurrent().getAttribute("myAttribute");
} finally {
VaadinSession.getCurrent().getLockInstance().unlock();
}
}
添加到巴顿的回答。虽然我不是这个主题的专家,但我在彻底阅读该文档后发布了我的理解,并阅读这个帖子罗兰·克鲁格。
结果:毫无意义的问题
虽然我不知道你问题的确切答案,但我相信这个问题没有实际意义。
➡ 让 Vaadin 7.1 及更高版本处理锁定自动为您服务。该文档表示,自动锁定路线优于手动锁定。
主线程上没有问题
如果访问VaadinSession从通常的 Vaadin 主用户界面线程内,则不需要显式锁定。在主线程中工作时,Vaadin 会根据需要自动锁定 VaadinSession。
应用程序的所有状态都存储在该会话对象中,因此 Vaadin 会定期访问和保护该会话。
其他主题
仅当从后台线程(从您启动的线程)访问 VaadinSession 时,锁定才会成为问题。
即使在这种情况下,Vaadin 也提供了两个选项,如果您传递一个参数,则会自动处理锁定Runnable到这些“访问”方法之一:
-
access方法上VaadinSession object
-
access方法上UI object
如果您的代码仅影响 VaadinSession 而没有触及任何UI
对象(用户界面、布局、小部件组件等),然后使用第一个,VaadinSession.access()
。另一方面,如果您的代码影响任何 UI 对象以及直接寻址 VaadinSession,请使用第二个,UI.access()
.
无需手动锁定
所以当你can在访问 VaadinSession 期间管理锁定,仅在后台线程中才需要这样做and由于某种原因你也不想打电话access
方法。但我无法想象任何这样的理由。
欲了解更多讨论和常规图我做了,看到这个类似的问题,如何将数据放入会话变量并获取vaadin中不同页面的数据?.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)