【问题标题】:GWT: Get constants in server sideGWT:在服务器端获取常量
【发布时间】:2012-10-03 18:07:39
【问题描述】:

我正在尝试获取存储在服务器端客户端中的常量 (ConstantsWithLookup),但它无法弄清楚如何去做。我的常量接口和常量属性在同一个文件夹中。

我尝试了其他类似线程的提示,但没有成功。

我使用 ResourceBundle 尝试了 Hermes、gwt-i18n-server、gwt-dmesg、GTWI18N,试图获取源文件属性。

对于前两个,似乎主要原因是对最新 GWT 版本的过时支持。至于 ResourceBundle,它找不到属性文件,因为在部署时,没有属性文件,只有一个 Constants.class。

我试图避免将我的属性文件更改到另一个位置(例如 /WEB-INF/constants)。

【问题讨论】:

    标签: gwt properties constants


    【解决方案1】:

    我将Hermes 与 GWT 2.5.0.rc1 一起使用,它工作正常。用法:

    • 将hermes-1.2.0.jar放入war/WEB-INF/lib
    • 然后在服务器端写类似
    MyConstantsWithLookup my = Hermes.get(MyConstantsWithLookup.class, "de");
    String string = my.getString(key);
    
    • 属性文件MyConstantsWithLookup.properties 必须MyConstantsWithLookup.java 存在于同一个包中,即使该属性文件为空(如果您使用@DefaultStringValue 等可能就是这种情况)
    • 还可以添加MyConstantsWithLookup_de.properties
    • 确保在编译时将这些属性文件复制到您的类旁边。 Javac 不这样做,因此必须在额外的构建步骤中完成(Eclipse 通常会自动执行此操作,但当您使用 Ant 构建时它不会自行发生)
    • 在编译服务器端时,许多构建设置将跳过“客户端”包中的 java 和属性文件。在这种情况下,请将您的常量文件放在“共享”包中(如果有的话)。

    【讨论】:

    • 感谢您的回复。我设法通过 build.xml 文件中的复制命令复制了文件。一切正常,但是当它尝试获取字符串时出现错误:GWT.create() 只能在客户端代码中使用!例如,不能从服务器代码调用它。我错过了什么吗?
    • 在服务器端,你必须使用Hermes.get(MyConstantsWithLookup.class, myLanguageCode)而不是 GWT.create(MyConstantsWithLookup.class)。
    • 是的,这就是我所做的,但不知何故,我一直收到该错误。我是否必须像在 gwt-i18n-server 中那样在我的 EntryPoint 类和 xml 模块中设置一些东西?
    • 不,您肯定是在服务器端某处调用 GWT.create()(可能在客户端包的某个类中,但由服务器执行)。查看堆栈跟踪,它应该会告诉您发生的位置!对于 Hermes,只需确保在服务器端 (Hermes.get()) 和客户端 (GWT.create()) 使用不同的代码。 (使用 gwt-i18n-server,它是相同的,但是如果您在 gwt.xml 中进行了设置,您可以在服务器端和客户端使用LocaleFactory.get(Class<T extends LocalizableResource> cls) both。 xml 文件等。但这是可选的,并且在 Hermes 中不可用 AFAIK。)
    • 确实有。由于我只关注服务器端,我不知道我正在使用 GWT.create() 实例化我的常量类,以便更轻松地从其他类中调用它。当我对此发表评论并修复我的其他课程时,一切都很完美。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    相关资源
    最近更新 更多