gpt4 book ai didi

java - 如何使用来自数据库的值验证 Tapestry 的表单字段?

转载 作者:行者123 更新时间:2023-12-01 13:20:25 26 4
gpt4 key购买 nike

我有一个关于使用数据库中存在的值进行字段验证的问题。

我一直在关注http://jumpstart.doublenegative.com.au/jumpstart/examples/input/contributingvalidators作为指南,大多数部分都非常简单。然而,我遇到了某种障碍。

我正在尝试制作自己的 validator :

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 并进行检查?

编辑:

validator 有一个您可以重写的方法,它可以执行以下操作:

Hook used by components to allow the validator to contribute additional attributes or (more often) client-side 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 代码,对吧?好吧,我在这部分想做的(不知道是否可能)是使用 DAO 实际检查数据库中的某些内容,甚至将更多(动态)参数传递给 validator ,例如值列表它不应该触发验证失败。

谢谢: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 变量被注入(inject)到我的 validator 对象中,通过 addInstance 方法贡献?

最佳答案

使用configuration.addInstance(name, class)而不是configuration.add(name, instance)。然后 Tapestry 将实例化您的 validator 并注入(inject)任何依赖项(例如 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 中具有一个“data-some-list”,您的 javascript validator 现在可以访问该列表。如果使用jquery,则has built in support对于“数据-”属性。例如:

var valuesAsString = $(#someField").data("values");

或者

var valuesAsString = $(#someField").attr("data-values");

关于java - 如何使用来自数据库的值验证 Tapestry 的表单字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com