1

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

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

  1. 在表单提交到服务器之前在客户端运行验证(现在使用 jQuery 验证插件)以检查格式正确/完整的表单。
  2. 在服务器上使用 Bean 上的注释运行 bean 验证,以在有人绕过客户端验证的情况下阻止数据库爆炸。

问题:

跟踪两组验证标准变得有点痛苦......错误消息很容易跟踪,因为我可以将它们粘贴到 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
    }
  }
});

有什么方法可以像重用消息一样重用号码?

4

1 回答 1

0

使用通用类或接口中的常量。<s:property/>用 Struts标签将它注入到 JSP jQuery Script 中。

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

基类、接口或任何包含常量的东西

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

动作(用常量实现/扩展上面的类)

@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.allowStaticMethodAccesstruestruts.xml

于 2013-07-19T15:33:08.013 回答