Папка сообщений для класса не из пакетов "страницы" и "компоненты"

В Tapestry .properties файлы с локализованными сообщениями находятся в page, component и каталогах сообщений приложений. У меня есть класс не из пакетов pages и components, в который я хочу вводить сообщения обычным способом:

@Inject
private Messages messages;

чтобы позже получать локализованные сообщения с

String msg = messages.get("message-key");

Я попытался разместить файл .properties в соответствующей папке (т.е. для классов src/main/java/nonPageOrComponentPackage/Foo.java в scr/main/resources/nonPageOrComponentPackage/Foo.properties), как это делается для классов page и component, но это не сработало.

Нужно ли где-то указывать путь к этому .properties файлу? Я пытался сделать это методом

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

в AppModule, но это тоже не сработало.

Заранее спасибо!


person jaos    schedule 15.03.2013    source источник


Ответы (1)


Механизм поиска сообщений предназначен для использования только внутри страниц/компонентов. У вас есть каталог сообщений приложения, он может быть переопределен некоторым количеством каталогов базовых страниц/компонентов, а затем переопределен каталогом конечных страниц/компонентов. Все это работает только для страниц и компонентов.

Если ваш класс не является страницей или компонентом, вы можете внедрить только каталог сообщений приложения, используя аннотацию @Inject. Вы также можете внести свой вклад в службу ComponentMessageSource, чтобы добавить дополнительные пакеты сообщений в каталог приложений.

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

Но вы должны понимать, что эти пакеты сообщений будут доступны для всех страниц/компонентов и сервисов.

Другой способ получить доступ к определенному пакету сообщений — использовать MessageImpl. Но этот путь сложен. Он использует внутренний класс гобелена.

messages = MessagesImpl.forClass(Foo.class);
person sody    schedule 15.03.2013