在XML文档中存储业务规则,之后在Java中验证,如何?

时间:2010-05-10 10:31:41

标签: java xml spring-mvc validation validationrules

示例XML规则文档:

<user>
  <username>
     <not-null/>
     <capitals value="false"/>
     <max-length value="15"/>
  </username>
  <email>
     <not-null/>
     <isEmail/>
     <max-length value="40"/>
  </email>
</user>

我该如何实现?我从头开始,我目前拥有的是User-class,以及一个UserController,它将User对象保存在de DB中(通过Service-layer和Dao-layer),基本的Spring MVC。 我不能使用Spring MVC Validation,但是在我们的Model-classes中,我必须使用XML文档,以便Admin可以更改规则

我认为我需要一种基于XML Rules文档提供的动态构建算法的模式,但除了大量的if语句外,我似乎无法想到任何其他内容。

我还没有任何解析功能,而且我不确定我将如何(de)将其与验证过程的实际实现结合起来。

2 个答案:

答案 0 :(得分:1)

这个轮子已经多次重新发明了!

您可能可以通过实现Spring的Validator接口来使用Spring MVC验证,但您可能需要实现或找到一种方法来验证通过其他方式加载的规则。

googled并找到许多描述如何在Spring中使用公共验证的页面。作为奖励,一些人描述使用valang。如果您的管理员可以在部署之前编辑验证规则,则其中一个可能就足够了。

如果您真的想制作自行开发的XML业务规则,可能需要使用Apache Digester来解析规则。您可能希望将规则加载到您自己的Spring Validator接口实现所使用的数据结构中。

如果规则必须在部署后更改,您当然需要添加一种机制来刷新规则。但至少Digester仍然可能会帮助那里。

答案 1 :(得分:0)

也许一个例子是:

  //PSEUDOCODE
  abstract class Validator {
    Map<String method, Set<Field> fields> validationMap;
    Map<String fieldName, Set<String> errorMessages> validationErrors;

 void parseXML() {
     validationMap.add("notNull", { " 'username', 'JavaPete' ", " 'email', 'pete@java.com' " }
     validationMap.add("max-length", { " 'username', 'JavaPete', '15' ", ... }
  }

 void validate() {
      for (String method : validationMap.keys) {
           for (Field field : validationMap.get(method) ) {
                 invoke(method, field);
           }
      }
  }

 void notNull(Field field) {
     if (field.getValue() == "") {
          validationErrors.add(field.getFieldName(), "Can't be null!");
     }
  }

注意我没有添加每个Set&lt;&gt;地图中的属性是正确的,但这只是为了说明一点。

这是一个有效的解决方案吗?强健?