Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Localization 更改应用程序区域设置会更改所有用户(Vaadin)_Localization_Locale_Vaadin - Fatal编程技术网

Localization 更改应用程序区域设置会更改所有用户(Vaadin)

Localization 更改应用程序区域设置会更改所有用户(Vaadin),localization,locale,vaadin,Localization,Locale,Vaadin,在我的应用程序中,当用户进入系统以本地化组件时,我设置了区域设置。最近我做了一个演示,注意到语言正在毫无理由地从英语转向荷兰语。原来,另一个人同时访问了演示服务器(托管在一台德国服务器上),并将其设置为荷兰语,这影响了我的英语演示和viceversa 我用不同的浏览器在我的机器上进行了一次尝试,使用Chrome normal和incognito模式等来模拟不同的会话,问题就出现了。关于如何处理/修复这个问题有什么想法吗?我以为Vaadin已经独立处理了用户会话,但应用程序的变量似乎是共享的 以下

在我的应用程序中,当用户进入系统以本地化组件时,我设置了区域设置。最近我做了一个演示,注意到语言正在毫无理由地从英语转向荷兰语。原来,另一个人同时访问了演示服务器(托管在一台德国服务器上),并将其设置为荷兰语,这影响了我的英语演示和viceversa

我用不同的浏览器在我的机器上进行了一次尝试,使用Chrome normal和incognito模式等来模拟不同的会话,问题就出现了。关于如何处理/修复这个问题有什么想法吗?我以为Vaadin已经独立处理了用户会话,但应用程序的变量似乎是共享的

以下是我在应用程序中更改区域设置的操作:

@Override
    public void setLocale(Locale locale) {
        super.setLocale(locale);
        xerb = ResourceBundle.getBundle("com.bluecubs.xinco.messages.XincoMessages", getLocale());
}
然后使用xerb资源包对UI进行国际化。我试着不做超级调用,但结果是一样的,好像xerb被不同的会话修改并在它们之间共享

有什么想法吗

瓦丁论坛上的同一个问题:

编辑


当获得每个实例时,我使用ThreadLocal模式添加了输出,并且看到每个浏览器的不同实例。(即com.bluecubs.xinco.core.server.vaadin。Xinco@2114ed对于第一个和com.bluecubs.xinco.core.server.vaadin。Xinco@fd68fe对于第二个浏览器),因此我相信模型使用正确。遗憾的是,我仍然看到了同样的问题。

Vaadin确实处理用户会话并将变量分开,因此这不是正常的行为。“xerb”字段必须以某种方式在用户之间共享。我现在能想到的唯一几个原因是

  • xerb
    是一个静态字段
  • xerb
    指向的
    ResourceBundle
    是相同的(静态)资源束
  • 实际的
    应用程序
    实例在用户之间共享
  • 你已经说过1不是原因#也许是,但我不知道这是否可能#如果您有一个自定义ApplicationServlet,其中包含一个bug,导致它为所有用户返回相同的应用程序实例,则可以使用3。或者可能有某种注入机制在所有应用程序中注入相同的东西

    没有更多的信息,就不可能知道到底发生了什么


    HTH

    Vaadin处理用户会话并将变量分开,因此这不是正常行为。“xerb”字段必须以某种方式在用户之间共享。我现在能想到的唯一几个原因是

  • xerb
    是一个静态字段
  • xerb
    指向的
    ResourceBundle
    是相同的(静态)资源束
  • 实际的
    应用程序
    实例在用户之间共享
  • 你已经说过1不是原因#也许是,但我不知道这是否可能#如果您有一个自定义ApplicationServlet,其中包含一个bug,导致它为所有用户返回相同的应用程序实例,则可以使用3。或者可能有某种注入机制在所有应用程序中注入相同的东西

    没有更多的信息,就不可能知道到底发生了什么

    HTH

    尝试应用程序以从应用程序中的其他控件访问
    应用程序
    实例。这样,每当您试图获取某些特定于会话的信息时,它就会更加明确。它在Vaadin应用程序中也非常普遍,因此代码可能更具可读性

    通过使其成为匿名侦听器的外部类,间接地将引用传递给
    应用程序的字段,可能会导致难以检测的bug,因为很难计算出创建控件的确切时间以及此时引用了什么
    ResourceBundle

    尝试应用程序从应用程序中的其他控件访问
    应用程序
    实例。这样,每当您试图获取某些特定于会话的信息时,它就会更加明确。它在Vaadin应用程序中也非常普遍,因此代码可能更具可读性


    通过使其成为匿名侦听器的外部类,间接地将引用传递给
    应用程序的字段,可能会导致难以检测的bug,因为很难计算出创建控件的确切时间以及此时引用了什么
    ResourceBundle

    什么是
    xerb
    ?它是扩展
    com.vaadin.Application
    的类中的字段吗?只是用于国际化的ResourceBundle。它不是静态变量。但是,是的,类中有一个字段扩展了com.vaadin.applications,那么您如何从其他类访问这个
    xerb
    字段呢?您正在使用吗?xerb是应用程序中的局部变量。它确实有一个公共方法来访问它:public ResourceBundle getResource(),但它是从应用程序的实例调用的,该实例发送到从应用程序创建的自定义组件(即,引用相同的上下文IMO),查看ThreadLocal模式,而不是确定地使用它。xerb到底是什么?它是扩展
    com.vaadin.Application
    的类中的字段吗?只是用于国际化的ResourceBundle。它不是静态变量。但是,是的,类中有一个字段扩展了com.vaadin.applications,那么您如何从其他类访问这个
    xerb
    字段呢?您正在使用吗?xerb是应用程序中的局部变量。它确实有一个公共方法来访问它:public ResourceBundle getResource(),但它是从应用程序的实例调用的,该应用程序被发送到从应用程序创建的自定义组件(即引用相同的上下文IMO),查看ThreadLocal模式,而不是确定地使用它。我不太理解#2。对我来说,1和2是一样的。当您声明ResourceBundle时,它引用的属性文件在运行时无法修改