Java BeanValidation Spring

时间:2013-07-19 15:15:29

标签: java jquery validation

背景。使用spring进行依赖注入,并在tomcat服务器上运行struts2。

在进行bean验证时,我喜欢采用两层方法。

  1. 在将表单提交给服务器以检查格式良好/完整的表单之前,在客户端运行验证(现在使用jQuery Validation Plugin)。
  2. 使用Beans it-self上的注释在服务器上运行bean验证,以便在有人绕过客户端验证的情况下停止数据库爆炸。
  3. 问题:

    跟踪两组验证标准会有点麻烦...错误信息很容易跟踪,因为我可以将它们粘贴到messages.properties文件中并对我的两个进行消息查找bean和JSP页面。真正的问题是数字。

    例如,假设我有一个带有字符串变量注释的清单。最小尺寸为10,最大尺寸为2000。在接下来的三个月里,我发现2000年并没有削减它,我需要将尺寸限制增加到最大值4000。我现在有两个地方可以改变这个数字。

    带注释的Java Bean验证:

    @Entity
    public class Checklist{
      @Size(min = 10, max = 2000, message = "{Checklist.size}")
      private String notes;
    }
    

    jQuery表单验证:

    $("#someForm").validate({
      rules:{
        'checklist.notes':{
          minlength:10,
          maxlength:2000
        }
      }
    });
    

    我是否可以通过某种方式重复使用该号码,这与我可以重复使用该消息的方式相同?

1 个答案:

答案 0 :(得分:0)

使用通用类或接口中的常量。 使用Struts <s:property/>标记将其注入JSP jQuery脚本。

这样,当您更改常量值时,所有Java类和所有JSP页面都将自动读取新值,而无需更改代码或替换某些内容。

基类,接口或包含常量的任何内容

public static final int MIN_LENGHT = 20;
public static final int MAX_LENGHT = 4000;

Action(使用常量实现/扩展上面的类)

@Entity
public class Checklist{
  @Size(min = MIN_LENGHT, max = MAX_LENGHT, message = "{Checklist.size}")
  private String notes;
}

JSP

$("#someForm").validate({
  rules:{
    'checklist.notes':{
      minlength:<s:property value="@my.package.constantClass@MIN_LENGHT" />,
      maxlength:<s:property value="@my.package.constantClass@MAX_LENGHT" />
    }
  }
});

请务必在struts.ognl.allowStaticMethodAccess

中将true设为struts.xml