2016-10-18 3 views
0

Мне нужно получить доступ к свойствам от application.properties в messages.properties:application.properties доступа из messages.properties

application.properties

max-size=3 

messages.properties

alert.error=You can only save {max-size} items. 

Не работает:

{max-size}, #{max-size}, ${max-size} 

Я знаю об this нить, но мне это нужно за пределами любого файла Java.

Обновление: Подход maven работает в файлах application.properties, но не между приложениями.properties и messages.properties. Разве не должен быть приказ? Если файл A имеет ключ a, но когда файл B разобран сначала, он еще не доступен в B, не так ли?

Отрывок из моего pom.xml:

<build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
       <includes> 
        <include>**/*.properties</include> 
       </includes> 
      </resource> 

"# {alert.error ($ {@ environment.getProperty ('макс размера')})}"

+0

Какова ценность получения этой собственности из application.properties во время сборки? Весной лучшей практикой является введение значений свойств с помощью @value. –

+0

@IssamELATIF, какой будет синтаксис для этого? alert.error = Вы можете сохранить только max-size ??? Предметы. – Journeycorner

+0

Синтаксис должен быть предупрежден.error = Вы можете сохранить {} элементы, а затем использовать MessageSource для получения сообщений. Я удалил свой ответ, поскольку это то же самое, что и предложение @ g00glen00b. –

ответ

0

вы можете сделать это с помощью Maven, вызывая плагин ресурса цели https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

где messages.properties помещается в SRC/основные/ресурсов

<build> 
     <filters> 
      <filter>src/main/resources/application.properties</filter> 
     </filters> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
    </build> 

вызова mvn resources:resources

3

Либо вы заменяете его, используя инструменты сборки (Maven/Gradle/...), или использовать параметр в сообщении, как это:

alert.error=You can only save {0} items. 

Теперь вы можете autowire ваш MessageSource и получить ваши maxSize:

@Autowired 
private MessageSource messageSource; 
@Value("${max-size}") 
private int maxSize; 

И тогда вам может использовать его таким образом:

messageSource.getMessage("alert.error", new Object[]{maxSize}, locale); 

Это решение позволяет использовать ваше сообщение для других размеров, а также, а не делать это только 3.

Если вы хотите использовать его в своих представлениях (например. с Thymeleaf), вы можете сделать:

<p th:text="#{alert.error(${@environment.getProperty('max-size')})}"></p> 
+0

Я предпочитаю эту реализацию, поскольку она более весна compliante –

+0

Диалог сообщения в конце концов является triggerd в угловой директиве после того, как ответ сервера не удался, поэтому Thymeleaf и Java не являются параметрами. – Journeycorner

+0

Если это сообщение должно быть видимым после сбоя ответа сервера, вам необходимо отправить это сообщение с вашего сервера (= Java) на ваш интерфейс (= AngularJS). Вы можете использовать 'messageSource.getMessage()' в своем Java-коде, как только ваш ответ завершится неудачно. – g00glen00b