Чтение содержимого файла свойств в классе Spring Validator - PullRequest
1 голос
/ 01 сентября 2010

Я использую Spring 3.0. Могу ли я прочитать файл свойств с локального диска, например: C: \ prop \ mylogin.properties (не в разделе webapps / server application)

mylogin.properties

login.heading=Login
login.username=Username
login.password_blank=Password cannot be blank

Я хочу использовать вышеупомянутое в моем классе Validator (класс бобов Java). Обратите внимание: я использую MultiAction Controller, а не SpringFormController

 public class MyUserValidator implements Validator 
    {

@Override
    public void validate(Object command, Errors errors) {
         String msg=null;
     //some conditions checked
         String msg=login.password_blank;-------->get from property file ??
        errors.rejectValue("User",msg,"defaultvalue");   

}

Привет, мы используем пакет ресурсов, не знаете, как это нужно будет использовать в валидаторе?

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" lazy-init="true"> 
       <property name="basenames"> 
       <list> 

      <value>${deployment.properties.path}/xyzsite/mylogin</value>   

 </list> 
 </property> 
<property name="cacheSeconds" value="${deployment.properties.cache_in_seconds}"/> 
</bean> 

Какое изменение я могу сделать в ответе, который вы упомянули, если использовался пакет ресурсов?

например, если я хочу установить размер страницы int pagesize = 5; ---> получить это из файла свойств

mylogin.properties

login.heading=Login
login.username=Username
login.password_blank=Password cannot be blank
login.page_row_size=5

Ответы [ 2 ]

2 голосов
/ 01 сентября 2010

Сообщения об ошибках обычно лучше всего обрабатывать как стандартную комбинацию Java ResourceBundle и JSTL, но это не сработает для загрузки свойств из произвольного расположения в файловой системе.

придется делать вещи немного больше вручную.Проще всего было бы вставить местоположение файла свойств, а затем извлечь из него свойства:

public class MyUserValidator implements Validator {

    private Resource propertiesLocation;

    @Required
    public void setPropertiesLocation(Resource propertiesLocation) {
        this.propertiesLocation = propertiesLocation;
    }

    @Override
    public void validate(Object command, Errors errors) {
        try {
            Properties props = PropertiesLoaderUtils.loadProperties(propertiesLocation);

            String key = "login.password_blank";
            String errorMessage = props.getProperty(key);
            errors.rejectValue("User", key, errorMessage);
        } catch (IOException e) {
            // handle me
        }
    }
}

и в конфигурации:

<bean id="userValidator" class="com.x.MyUserValidator">
  <property name="propertiesLocation" value="file:/prop/mylogin.properties"/>
</bean>

Обратите внимание на следующую строку:

errors.rejectValue("User", key, errorMessage);

Поскольку вы не используете ResourceBundle, вам нужно передать «сообщение об ошибке по умолчанию» в качестве третьего аргумента.

0 голосов
/ 03 сентября 2010

Хорошо, это отсортировано, выполнив следующие действия: mav = new ModelAndView mav.addAllObjects (errors.getModel ());

и в jsp, используя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...