实际上,您可以通过自定义验证器解决此问题,该验证器可以获取另一个字段并相互比较值。下面的代码使用 valdr-bean-validation 在服务器端生成 valodation.json。
如果你想在没有这个的情况下使用它,只需查看 JS 代码并手动在你的 validation.json 中添加验证器。
Java 注释(valdr 验证器的服务器端声明):
package validation;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR,
ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
public @interface DateFormat {
String message();
Class[] groups() default { };
String beforeFieldName();
}
Java Bean(注解的使用,这个类必须在validation.json的生成中使用):
package pojo;
import validation.DateFormat;
public class RegistrationPojo implements BasePojo {
@NotNull(message = "message.date1.required")
private Date date1;
@NotNull(message = "message.date2.required")
@DateFormat(message = "message.date2.date", beforeFieldName = "date1")
private Date date2;
}
JS(自定义验证器的实现并在 valdr 中注册):
module.factory('validation.DateFormat', [
function () {
return {
name: 'validation.DateFormat',
validate: function (value, constraint) {
var minOk = true;
var maxOk = true;
var format = false; // constraint.pattern is mandatory
//do not validate for required here, if date is null, date will return true (valid)
console.log("my date validator called");
console.log(" beforeFieldName: " + constraint.beforeFieldName);
var field = document.querySelector('[name="' + constraint.beforeFieldName + '"]');
console.log("field value: " + (field ? field.value : "null"));
return (!field || value > field.value);
}
};
}]);
module.config([
"valdrProvider",
function(valdrProvider) {
valdrProvider.addValidator('validation.DateFormat');
}]);