我对数据库中存在的值进行字段验证存在疑问。
我一直遵循http://jumpstart.doublenegative.com.au/jumpstart/examples/input/contributingvalidators作为指导,对于大多数部分来说,它非常简单。但是,我碰到了一堵墙。
我正在尝试制作自己的验证器:
public class UniqueValueProperty extends AbstractValidator<String, String> {
// my validation stuff here
}
这就是我要贡献的方式:
public void contributeFieldValidatorSource(MappedConfiguration<String, Validator> configuration) {
configuration.add(UniqueValueProperty.VALIDATION_NAME, new UniqueValueProperty());
}
因此,总结一下:
我了解我需要提供用于客户端验证的JavaScript代码,但是我不确定如何实际访问DAO并进行检查?
编辑:
验证程序有一个您重写的方法,该方法将执行此操作:
组件使用的挂钩,以允许验证者做出贡献
其他属性或(通常)客户端JavaScript
@Override
public void render(Field field, String constraintValue,
MessageFormatter formatter, MarkupWriter writer, FormSupport formSupport) {
formSupport.addValidation(field, VALIDATION_NAME, buildMessage(formatter, field, constraintValue), null);
如果我正确理解,可以添加一些JavaScript代码进行客户端验证,对吗?好吧,我想在那部分做的(如果可能的话,请回答dunno)是实际使用DAO检查数据库中的某些内容,甚至将更多(动态)参数传递给验证器,例如值列表它不应触发验证失败。
感谢:D
编辑:
兰斯,您是否建议我可以这样做:
Tapestry.Validator.uniqueValueProperty = function(field, message, constraint) {
field.addValidator(function(value) {
if ((value != null) && (value.trim().length > 0)) {
if (dao.valueExistsInColumn(value, constraint)) {
throw message;
}
}
});
};
通过
dao
方法在我的验证器对象中注入了addInstance
变量? 最佳答案
使用configuration.addInstance(name, class)
代替configuration.add(name, instance)
。然后,挂毯将实例化您的验证器并注入任何依赖项(例如DAO)。
编辑
例如:
public class MyValidator extends AbstractValidator {
@Inject private Dao dao;
public void render(Field field, String constraintValue, MessageFormatter formatter, MarkupWriter writer, FormSupport formSupport) {
// this is the serverside representation of the field which will be rendered to HTML
Element fieldElement = writer.getElement();
List<String> values= dao.getSomeList(constraintValue);
String valuesAsString = values.toString();
// add an attribute to the DOM, this can be referenced in javascript later
fieldElement.attribute("data-values", valuesAsString);
formSupport.addValidation(...);
}
}
现在,该字段将在HTML / DOM中具有一个“数据列表”,您的JavaScript验证程序现在可以访问该列表。如果使用jquery,则has built in support表示“数据-”属性。例如:
var valuesAsString = $(#someField").data("values");
要么
var valuesAsString = $(#someField").attr("data-values");