Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC应用程序中根据数据源(XML)验证表单输入的方法_Java_Spring_Validation - Fatal编程技术网

Java 在SpringMVC应用程序中根据数据源(XML)验证表单输入的方法

Java 在SpringMVC应用程序中根据数据源(XML)验证表单输入的方法,java,spring,validation,Java,Spring,Validation,我是Spring的新手,我很好奇如何根据数据源验证表单输入。顺便说一下,我正在使用Spring3.0.3。假设我有以下表格: public class MyForm { private String format; public String getFormat() { return format; } public void setFormat( value:String ) { format = value;

我是Spring的新手,我很好奇如何根据数据源验证表单输入。顺便说一下,我正在使用Spring3.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 version="1.0" encoding="UTF-8"?>
<fileformats>
    <item>jpg</item>
    <item>png</item>
    .... etc ....
</fileformats>
公共类MyFormvalidator实现验证器
{
@凌驾
公共布尔支持(类clazz){
返回MyForm.class.equals(clazz);
}
@凌驾
公共无效验证(对象对象,错误){
MyForm MyForm=(MyForm)obj;
ValidationUtils.rejectIfEmptyOrWhitespace(错误,“格式”,“错误.必需”);
如果(!myForm.getFormat().equals(“jpg”)&&
!myForm.getFormat().equals(“png”)&&
……等等……){
errors.rejectValue(“格式”,“error.invalid”);
}
}
}
这一切都很好,但假设我想添加新的受支持格式,而无需调整验证器、重新编译和部署它。让我们用一个可以修改的XML文件来保持简单,而不是进入数据库。它看起来像这样:

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 version="1.0" encoding="UTF-8"?>
<fileformats>
    <item>jpg</item>
    <item>png</item>
    .... etc ....
</fileformats>

jpg
巴布亚新几内亚
.... 等

最后,所有这些的真正意义…我应该采取什么方法在表单输入验证期间使这些数据可用?

最简单的方法是使验证器成为Spring bean,并将格式列表放入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())
公共类MyFormvalidator实现验证器
{
私有列表文件格式;
公共MyFormValidator(列表文件格式){
this.fileforms=文件格式;
}
…//验证程序的其余部分,包括检查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>

jpg
巴布亚新几内亚
等

> p>您是否考虑对应用程序上下文源更改的更改?可以在bean定义中创建列表并将其注入到验证器中。

  <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" );
          }
      }


谢谢雅各伯,我真的喜欢这个方法。我现在还不是一个java开发者,但是这对我来说是最有意义的。当然,如果你考虑应用上下文版本控制器,你可以把bean定义放在一个单独的文件中,并将它导入Web.xml中。