java - 该类的消息文件夹不是来自 'pages' 和 'components' 包

标签 java properties tapestry

在Tapestry中,带有本地化消息的.properties文件位于页面组件和应用程序消息目录中。我的类不是来自 pagescomponents 包,我想在其中以通常的方式注入(inject)消息:

@Inject
private Messages messages;

稍后使用

获取本地化消息
String msg = messages.get("message-key");

我尝试将 .properties 文件定位到相应的文件夹(即,对于类 src/main/java/nonPageOrComponentPackage/Foo.javascr/main/resources/nonPageOrComponentPackage/Foo.properties),就像对 pagecomponent 类所做的那样,但它不起作用。

我是否需要在某处指定此 .properties 文件的路径?我尝试用方法来做到这一点

public void contributeValidationMessagesSource(@NotNull Configuration<String> configuration) {
  configuration.add("/scr/main/resources/nonPageOrComponentPackage/Foo.properties");
}

AppModule中,但它也不起作用。

提前致谢!

最佳答案

消息检索机制设计为仅在页面/组件内部使用。您有应用程序消息目录,它可以被一些基本页面/组件目录覆盖,然后被结束页面/组件目录覆盖。所有这些仅适用于页面和组件。

如果您的类不是页面或组件,您可以使用 @Inject 注释仅注入(inject)应用程序消息目录。您还可以为 ComponentMessageSource 服务做出贡献,以将一些其他消息包添加到应用程序目录中。

@Contribute(ComponentMessagesSource.class)
public void contributeComponentMessagesSource(@Value("context:WEB-INF/mail") Resource mailMessages, OrderedConfiguration<Resource> configuration) {
  configuration.add("mail", mailMessages);
}

但您应该了解,此消息包将可用于所有页面/组件和服务。

访问某些特定消息包的另一种方法是使用 MessageImpl。但这种方式很棘手。它使用 Tapestry 内部类。

messages = MessagesImpl.forClass(Foo.class);

关于java - 该类的消息文件夹不是来自 'pages' 和 'components' 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15427346/

相关文章:

java - Tapestry - 列表的表单元素可能吗?

c# - 运算符优先级

java - 单作者多读者原语图

groovy - 在 groovy 中查找闭包的自由变量的列表/映射

java - Liquibase 与 Tapestry 和 Hibernate 集成 : initial schema creation step

css - 更改 Web 应用程序的 URL 后不再识别 Layout.css

java - 作为可执行 jar 运行时未找到 hibernate.cfg.xml

jboss-as-7.1.1.Final 上的 Java .war 部署问题

c# - 无法获取 PropertyInfo.SetValue() 来设置我的对象的值

c# - 具有操作/条件的属性