gpt4 book ai didi

java - 是什么触发了 GWT 的验证?验证失败时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 09:54:51 24 4
gpt4 key购买 nike

我对 GWT 验证的工作原理感到困惑。我读过这篇GWT Page on Validation ,但我仍然不确定以下事情:

  • 何时进行验证?在 getter/setter 上?数据模型何时从服务器发送 -> 客户端?从客户端 -> 服务器?

  • 验证失败时会发生什么?是否抛出运行时异常?

假设我有以下类(class):

package com.sixtyfootersdude.gwt.model;

public class Dog implements Serializable {

@NotEmpty
private String name;

public Dog () {
}

public void setName (String name){
this.name = name;
}

public String getName (){
return this.name;
}
}
<小时/>

什么情况下 myDog.name 可以为空或 null?例如,假设我创建了一只像这样的新狗:

Dog myDog = new Dog();
// Presently, myDog.name is null.

myDog.setName("Santa");
// Validation should now pass, but I am not sure if it is invoked here.

myDog.setName(null);
// Validations should now fail, but I am not sure if it is invoked here.

// What would I need to do to trigger validation? When would validation be invoked?
<小时/>

其他信息:

  • GWT 2.5 和 GWT 2.7

最佳答案

您似乎错过了链接文档中的几个步骤 - “创建 validator 工厂”展示了如何构建 validator ,不久之后展示了如何询问 validator 给定的对象是否确实有效。它看起来像这样:

public final class SampleValidatorFactory extends AbstractGwtValidatorFactory {

/**
* Validator marker for the Validation Sample project. Only the classes and groups listed
* in the {@link GwtValidation} annotation can be validated.
*/
@GwtValidation(Dog.class)
public interface GwtValidator extends Validator {
}

@Override
public AbstractGwtValidator createValidator() {
return GWT.create(GwtValidator.class);
}
}

...

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Person>> violations = validator.validate(myDog);
//do something with those violations, if any

When is validation performed? On a getter/setter? When the data model is sent from server -> client? From client -> server?

除非每个 setter(或出于某种原因 getter)实际上都调用了 validator ,否则这种情况不会发生,也不会导致异常,只是一组可能为空的错误。

如上所示,当您调用 validator.validate(myBean) 时会发生验证。服务器可以以更通用的方式支持这一点,并且您始终必须让服务器检查工作并且不要信任客户端(因为 JS 在用户的浏览器中运行,因此他们可以恶意修改它)。因此,您的服务器在看到数据时也应该运行这些相同的验证(可能还有更多)。

What happens when validation fails? Is a runtime exception thrown?

方法 Validator.validate(bean, groups...) 返回 ConstraintViolation 对象的 java.util.Set,特定于您的 bean,它指定每个错误的路径、消息以及 validator 提供的任何其他自定义数据。不会抛出异常,尽管您可能会创建一个异常(检查的或运行时的)并从代码中的某个地方抛出它。您可以考虑将此功能构建到您为每个表单使用的任何逻辑中,并在单击“保存”时或每 100 毫秒调用它 - 无论对您的项目有意义什么。处理问题的最简单方法可能是使用提供的路径以某种方式为用户突出显示错误。考虑使用编辑器框架的 HasEditorErrors 接口(interface)来帮助突出显示。

关于java - 是什么触发了 GWT 的验证?验证失败时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333717/

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