Подход для проверки ввода формы по источнику данных (XML) в приложении Spring MVC - PullRequest
1 голос
/ 14 июля 2010

Я новичок в Spring, и мне любопытно, как подойти к проверке ввода формы с источником данных. Я использую Spring 3.0.3, кстати. Допустим, у меня есть следующая форма:

public class MyForm {

     private String format;

     public String getFormat() {
         return format;
     }

     public void setFormat( value:String ) {
         format = value;
     }
}

Теперь допустим, что свойство format является строковым представлением формата файла: «jpg», «png», «gif», «bmp» и т. Д. Естественно я подумал написать валидатор для формы. Это выглядит примерно так:

public class MyFormvalidator implements Validator
{
    @Override
    public boolean supports( Class<?> clazz ) {
        return MyForm.class.equals( clazz );
    }

    @Override
    public void validate( Object obj, Errors errors ) {

        MyForm myForm = (MyForm) obj;
        ValidationUtils.rejectIfEmptyOrWhitespace( errors, "format", "error.required" );

        if( !myForm.getFormat().equals( "jpg" ) &&
            !myForm.getFormat().equals( "png" ) &&
            .... etc .... ) {
           errors.rejectValue( "format", "error.invalid" );
        }
    }
}

Так что все в порядке, но допустим, я хочу добавить новые поддерживаемые форматы без необходимости настраивать мой валидатор, перекомпилировать и развертывать его. Вместо того, чтобы войти в базу данных, а что нет, давайте сделаем это проще с небольшим файлом XML, который можно изменить. Это будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<fileformats>
    <item>jpg</item>
    <item>png</item>
    .... etc ....
</fileformats>

И, наконец, реальный смысл всего этого ... каким должен быть мой подход к предоставлению этих данных во время проверки ввода формы?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Самый простой способ сделать это - сделать Validator bean-компонентом Spring и поместить список форматов в конфигурацию Spring:

public class MyFormvalidator implements Validator
{
    private List<String> fileFormats;

    public MyFormValidator(List<String> fileFormats) {
        this.fileFormats = fileFormats;
    }

... //the rest of your validator, including checks for fileFormats.contains(myForm.getFormat())

Теперь в конфигурации Spring у вас есть

<bean name="myFormValidator" class="something.something.MyFormValidator">
    <constructor-arg>
         <list>
             <value>jpg</value>
             <value>png</value>
             ... etc ...
         </list>
    </constructor-arg>
</bean>
1 голос
/ 14 июля 2010

Считаете ли вы изменения в источниках контекста приложения изменениями?Вы можете создать список в своем определении компонента и вставить его прямо в валидатор.

  <beans
      xmlns="http://www.springframework.org/schema/beans"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="
          http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util-3.0.xsd">

  <bean id="myValidator"
  class="MyValidator>
      <property name="acceptedExtensions"/>
          <util:set>
              <value>jpg</value>
              <value>png</value>
          </util:set>
      </property> 
  </bean> 
  </beans>


  public class MyFormvalidator
  implements Validator {
      private Set<String> acceptedExtensions;
      public void setAcceptExtensions(Set<String> extensions) {//etc}

      @Override
      public void validate( Object obj, Errors errors ) {

          MyForm myForm = (MyForm) obj;
          ValidationUtils.rejectIfEmptyOrWhitespace(
              errors, "format", "error.required" );

          if( !acceptedExtensions.contains(myForm.getFormat){
             errors.rejectValue( "format", "error.invalid" );
          }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...