Ple*_*t94 1 java vaadin vaadin8
我正在创建一个网络应用程序.
我有一个MyUI延伸UI.
public class MyUI extends UI {
public static Authentication AUTH;
@Override
protected void init(VaadinRequest vaadinRequest) {
AUTH = new Authentication();
updateContent();
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
在Authentication()我有用户登录.当我注销时,该用户被设置为null.
我注意到当我从两个设备访问服务器时,所以当我应该有两个连接到服务器时,当有人进行注销时,另一个也注销了.
在Authentication类中有以下方法:
public void doLogout() {
System.out.println("User: " + this.user.getMail() + " has logged out.");
this.user = null;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从其他帐户注销时,我收到错误,user.getMail()因为用户已设置为null.
是com.vaadin.ui.UI独一无二的?如何处理Vaadin中的不同连接?
这里的基本Java,与Vaadin无关......
关键字static表示one value per class,也称为"类变量",通常称为"全局变量".不是面向对象的.一般来说,你应该尽量减少使用静电.
省略该关键字意味着"此类的每个实例一个值",一个实例变量也称为成员变量.这是面向对象的.
我建议您在开始Vaadin项目之前了解更多Java的基础知识.并学习Java Servlet技术如何工作的基础知识,或许阅读O'Reilly出版的关于Servlet的Head First书籍(现已过时,但基础知识相同).您还需要了解线程和并发问题等高级主题,因为Vaadin等Servlet环境本质上是多线程的.最后,阅读Goetz的Java Concurrency In Practice一书.
要存储Vaadin应用程序的每个用户的值,请使用会话属性.这是一个键值存储,您可以通过指定键("属性"的名称)来插入和检索值.作为Java Servlet技术的一部分,会在用户首次连接时自动为您实例化会话.
或者,您可以将每个用户的值存储在UI该类中作为实例变量.每个Vaadin用户UI在第一次连接时都以实例开始.但要注意:您可以在Vaadin 8应用程序中打开多个Web浏览器选项卡/窗口,每个应用程序都有自己的UI实例.因此,要在这些多个UI对象之间共享数据,请使用会话属性.
请注意,虽然每个Vaadin应用程序至少UI定义了一个子类,但您也可以定义其他UI子类,对于上面提到的其他浏览器选项卡/窗口来显示不同的内容.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |