В качестве альтернативы <f: loadBundle> я разрабатывал новый компонент <s: messageSource>, который можно использовать для представления сообщений из любого Spring MessageSource , а также предлагал несколько других преимуществ.
Новый компонент является заменой для <f: loadBundle> .
|
1
2
3
4
|
<s:messageSource source="#{messageSource}" var="messages"/><p> <h:outputText value="#{messages.hello}"/></p> |
Атрибутом источника может быть любое выражение EL, которое разрешается в экземпляр MessageSource . Если источник не указан, будет использоваться Spring ApplicationContext . Атрибут var — это имя переменной, которая будет использоваться для доступа к сообщениям.
Если вы сделаете ссылку на сообщение в своем XHTML, которое вы забыли определить, вы либо увидите предупреждающее сообщение (в процессе разработки), либо возникнет исключение (в процессе разработки).
Как и в стандартном JSF, ваши сообщения и заполнители для использования с <h: outputFormat>
|
1
|
pages.message.simple.welcome=Welcome to {1} with {0} |
|
1
2
3
4
|
<h:outputFormat value="#{messages.welcome}"> <f:param value="Spring"/> <f:param value="JSF"/></h:outputFormat> |
Тег <h: outputFormat> немного многословен, поэтому для удобства сообщения Spring можно использовать как Map s. Это позволяет вам ссылаться на заполнители гораздо более кратко:
|
1
|
<h:outputText value="#{messages.welcome['Spring']['JSF']}"/> |
Тот же синтаксис позволяет отображать объекты Java на сообщения. По умолчанию объекты сопоставляются путем создания ключа сообщения из имени класса. Например, следующий класс:
|
1
2
3
|
package org.example;public class ExampleObject {} |
Можно ссылаться в JSF:
|
1
|
<h:outputText value="#{messages[exampleInstance]}"/> |
Разрешение на следующее сообщение:
|
1
|
org.example.ExampleObject=example |
Для объектов enum ключ сообщения включает имя enum, а также класс:
|
1
2
3
4
5
|
package org.example;public enum ExampleObject { ONE, //mapped to message key org.example.ExampleObject.ONE TWO //mapped to message key org.example.ExampleObject.TWO} |
Объектные сообщения также могут ссылаться на свойства, которые должны составлять часть сообщения:
|
1
2
3
4
5
6
7
8
9
|
org.example.PersonName=Name is {first} {last}...package org.example;public class PersonName { ... public String getFirst() {...} public String getLast() {...}} |
Вы также можете определить свои собственные стратегии объектных сообщений, используя источник сообщений, который реализует интерфейс org.springframework.springfaces.message.ObjectMessageSource .
Если вы хотите проверить любой из этого кода, взгляните на пакеты org.springframework.springfaces.message и org.springframework.springfaces.message.ui из проекта GitHub .
Ссылка: Интеграция Spring & JavaServer Faces: Интернационализация и локализация от нашего партнера JCG Филиппа Уэбба в блоге Фила Уэбба в блоге.