如何验证 vaadin 制作的表单中的字段

2023-12-14

我正在使用 vaadin 制作一个 Java 项目。现在我有一个用户注册表,如下所示:

public class RegistrationComponent extends CustomComponent implements View {

    public static final String VIEW_NAME = "Registration";
    public RegistrationComponent(){
        Panel panel = new Panel("Registration Form");
        panel.setSizeUndefined();
        FormLayout content = new FormLayout();
        CheckBox checkBox1, checkBox2, checkBox3;
        checkBox1 = new CheckBox("Check Box 1");
        checkBox2 = new CheckBox("Check Box 2");
        checkBox3 = new CheckBox("Check Box 3");
        checkBox1.setRequired(true);
        checkBox2.setRequired(true);
        TextField mailTextField = new TextField("Email Address");
        TextField passwordTextField = new TextField("Password");
        TextField confirmPasswordTextField = new TextField("Confirm Password");
        final Button submitButton = new Button("Submit");
        content.addComponent(mailTextField);
        content.addComponent(passwordTextField);
        content.addComponent(confirmPasswordTextField);
        content.addComponent(checkBox1);
        content.addComponent(checkBox2);
        content.addComponent(checkBox3);
        content.addComponent(submitButton);
        content.setSizeUndefined(); // Shrink to fit
        content.setMargin(true);
        panel.setContent(content);
        setCompositionRoot(panel);



        //listeners:

        submitButton.addClickListener(new Button.ClickListener() {
            public void buttonClick(Button.ClickEvent event) {
                //
            }
        });

    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event){
        //
    }
}

当然,表单除了显示之外不做任何事情。 我想做的是,如果不满足某些要求,则让 Vaadin 在字段旁边显示错误消息。要求本身并不那么重要(假设我希望电子邮件字段至少包含 8 个字符)。我想知道的是:有没有简单的内置方法可以做到这一点?我到过这里:https://vaadin.com/api/com/vaadin/data/Validator.html

但我不明白如何使用验证器,或者即使这就是我想使用的。我一直在谷歌上寻找使用示例,但到目前为止没有成功。感谢帮助!


Vaadin 7

以下内容适用于 Vaadin 7。 validate() 方法已在 Vaadin 8 中删除。

Vaadin 中的所有字段类型都实现了Validatable接口有addValidator接受 Validator 的实现作为参数的方法。

因此,要添加一个验证器来检查 TextField 值的长度,您可以这样做:

TextField textField = new TextField();

        textField.addValidator(

                new StringLengthValidator(
                     "Must be between 2 and 10 characters in length", 2, 10, false));

Vaadin 字段具有向用户显示验证错误的内置功能。默认情况下,该字段将以红色突出显示,并且该字段旁边会出现一个感叹号,将鼠标悬停在该字段上将向用户显示更详细的消息。

自动验证

默认情况下,该字段现在将在下一个服务器请求时验证,该请求包含向服务器发送的字段的更改值。如果字段设置为“立即”,则当字段失去焦点时会发生这种情况。如果该字段不是即时的,则当某些其他 UI 操作触发返回服务器的请求时,将进行验证。

显式验证

有时,您可能希望对何时进行验证以及何时向用户显示验证错误进行更多控制。可以通过设置禁用自动验证validationVisible为假。

textField.setValidationVisible(false);

当您准备好验证字段时(例如在按钮单击侦听器中),您可以显式调用validate(您也可以使用commit()如果它是缓冲字段)TextField 实例上的方法来触发验证。validate会抛出一个InvalidValueException如果该值无效。如果您想使用 TextField 组件中包含的验证错误的内置显示,您还必须设置validationVisible回到true.

try {
    textField.validate();
} catch (Validator.InvalidValueException ex) {
    textField.setValidationVisible(true);
    Notification.show("Invalid value!");
}

请注意,一旦validationVisbible设置回 true,验证将隐式发生,因此如果您想保持对验证的显式控制,则必须记住在下一个请求时将其设置回 false。

验证消息

可以从 Validator.InvalidValueException 实例中提取单独的验证消息,该实例在以下情况下抛出:validate() or commit()叫做。

try {
    textField.validate();
} catch (Validator.InvalidValueException ex) {
    for (Validator.InvalidValueException cause: ex.getCauses()) {
        System.err.println(cause.getMessage());
    }
}

验证者

验证器实现了 Validator 接口,Vaadin 附带了几个有用的验证器。查看 API 文档以获取有关这些内容的更多信息:https://vaadin.com/api/7.4.5/com/vaadin/data/Validator.html

自定义验证器很容易实现,这里是一个来自瓦丁之书:

class MyValidator implements Validator {
    @Override
    public void validate(Object value)
            throws InvalidValueException {
        if (!(value instanceof String &&
                ((String)value).equals("hello")))
            throw new InvalidValueException("You're impolite");
    }
}


final TextField field = new TextField("Say hello");
field.addValidator(new MyValidator());
field.setImmediate(true);
layout.addComponent(field);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 vaadin 制作的表单中的字段 的相关文章

  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • 使用SimpleMailMessage类发送邮件时如何使java字符串着色

    我正在使用 java 中的 SimpleMailMessage 类发送邮件 我将 spring 与 hibernate 结合使用 我想在发送邮件时将特定字符串设置为彩色 Code String emailBody Dear username
  • JPA 实体中的方法是否允许抛出异常?

    我尝试创建的 Entity 有问题 当尝试使用 OpenJPA 实现在 Eclipse 中测试类时出现问题 我有not尝试过其他人 所以不确定它是否适用于他们 我的测试用例非常简单 因为它创建一个 EntityManagerFactory
  • 编译错误:Android Studio

    我正在尝试修改基于 IntelliJ 构建的现有 Android 项目 我已经搜索并尝试了很多东西 但我的错误仍然没有消失 Error 5 1 android apt compiler main D android tinynote app
  • 在 Java 中重置 Graphics2D 对象

    我正在用 Java 尝试 Graphics2D 但像往常一样 我被困住了 P 问题是 假设我有这个代码 Graphics2D g Graphics2D this getGraphics Inside a JFrame g rotate Ma
  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • 将 Spring Boot 应用程序部署到 Heroku 失败并显示“无效标志:--release -> [帮助 1]”

    当我尝试将代码部署到 Heroku 时 通过git push heroku master 我收到 Maven 错误 remote ERROR Failed to execute goal org apache maven plugins m
  • x.person 上的 @OneToOne 或 @ManyToOne 引用未知实体:y.Person - 继承问题

    我的 Hibernate 架构有问题 我有一个 MappedSuperClass 人员 一名员工和一名客户 gt Person class MappedSuperclass Audited public class Person exten
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 使用 javax.mail 和 CentOS 的邮件服务器

    我有一个 Java 程序 安装在一台旧的 Ubuntu 机器上 并使用 javax mail 发送邮件 然而 那台机器宕机了 我现在在新的 CentOS 机器上运行相同的 Java 应用程序 但是 当我尝试使用 mail smtp host
  • SOAP Web 服务中的用户身份验证

    我提出了一个关于JAX WS 身份验证和授权 如何 https stackoverflow com questions 5314782 jax ws authentication and authorization how to 讨论了安全
  • 如何在 Eclipse 中使用 Hibernate Tools 生成 DAO?

    我在用着 Eclipse Java EE IDE Web 开发人员 版本 Indigo 发布 使用 hibernate 工具 我对 Eclipse 中的 hibernate 很陌生 所以我学习如何配置 hibernate 并使用注释生成 P
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • GAE - Eclipse 中的开发服务器未更新?

    我在 Eclipse 上使用 Google AppEngine 开发服务器 我的本地网页似乎没有更新 直到我在开发服务器上进行了多次重新启动 使用 Eclipse 中的 运行 或 调试 按钮 我究竟做错了什么 基本流程是 更改 java 文
  • Spring Data JPA 和 Exists 查询

    我正在使用 Spring Data JPA 使用 Hibernate 作为我的 JPA 提供程序 并想要定义一个exists附加 HQL 查询的方法 public interface MyEntityRepository extends C
  • 文件构造函数说明

    我无法理解以下文件构造函数 public File String parent String child and public File File parent String child 参数有什么作用parent and child该文件

随机推荐

  • Windows.Web.Http.HttpClient + WEB API Windows 身份验证

    我使用 Windows Web Http HttpClient 连接到我的 WEB API 应用程序没有提示输入用户 ID 和密码 但最近我通过将 AuthorizeAttribute 过滤器从操作级别移动到类级别来更改 WEB API 现
  • Powershell 脚本不会将 $PSDefaultParameterValues 添加到 $profile

    我正在编写一个快速的 Powershell 脚本来导入模块并更新各种计算机上的一些默认参数 当我添加时 我在脚本中遇到了一个问题 PSDefaultParameterValues到 profile 更改为System Management
  • 自定义 UITableViewRowAction 按钮

    我想为 uitableviewrowaction 按钮设置顶部和底部约束 这是我的代码 NSArray tableView UITableView tableView editActionsForRowAtIndexPath NSIndex
  • 使用 Eclipse 在 64 位机器上编译 32 位 Java

    所以问题如标题所示 我需要在 32 位 Windows XP 系统上的 Tomcat 中运行我的服务器应用程序 我正在 Eclipse 中的 64 位 Windows 7 上工作和编译 如何将其编译为 32 位 我需要做什么 当我在 64
  • ASP.Net ITemplate - 声明方式

    当我们想在用户控件中定义模板时 我们在用户控件中声明一个像这样的字段 public ITemplate MyTemplate get set 这样用户定义的模板内容将在 MyTemplate 中表示 并且您可以使用它 并且有多种方法可以自定
  • java.lang.NoSuchMethodError:javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContex

    我有这个代码不起作用
  • spring中如何并发读取并处理多个文件?

    我是 Spring 框架的新手 我正在使用 spring 做一个简单的项目 但陷入了困境 在我的项目中 我正在使用 spring poller 从目录中读取文件 然后通过各种渠道处理该文件并将其发送到队列 但问题是 文件入站通道适配器 我正
  • R 中一列的值基于另一列的值

    我必须在一列中找到最小值 并根据该值找到另一列中对应的值 我的数据集是 K 列名称为 X Y gt K X Y 1 2 3 2 4 5 3 6 7 4 8 9 5 10 11 这些列具有这些值 我使用以下方法找到 Y 列的最小值 apply
  • 在 JPanel 中创建 Java 命令控制台

    我想创建一个类似于 Windows 命令提示符的 命令控制台 带有命令历史记录等 它位于 JPanel 中 以便可以将其添加到 JFrame 中 我想要做的是向用户呈现提示以允许他们执行命令 我的想法与 BeanShell 控制台类似 但是
  • 在同一个声明中合并和 Concat,Postgres

    我试图将个人的名字和姓氏连接在一起 但在存在空值时合并团队名称 不幸的是 我的语法返回一个空格 因此合并不会将其识别为空值 我可以做什么来纠正这个问题 我目前使用的语法 coalesce Concat first name last nam
  • 西农似乎没有监视事件处理程序回调

    我正在与 Jasmin Simon 和 jasmin simon 一起测试骨干视图 这是代码 var MessageContainerView Backbone View extend id messages initialize func
  • 如何在 Jenkins 控制台中获取 Matlab 输出 [重复]

    这个问题在这里已经有答案了 我正在尝试将 MATLAB 单元测试集成到 Windows 环境中的 Jenkins 中 我的问题是我无法在 Jenkins 控制台中获取 MATLAB 输出 即使对于一个简单的disp Hello World
  • 用于多复选框的 zend 表单从标签中删除输入

    我正在使用 zend form Zend Framwork 的一部分 创建一个表单 并发现当我使用 Zend Form 的 multicheckbox 元素 Zend Form Element MultiCheckbox 添加一组复选框时
  • TimeZoneInfo.ConvertTime 从 PST 到 UTC 到 AEST - 缩短一小时

    我转换了一个表示太平洋时区时间的字符串 我用它来创建一个DateTime object var pacificDateTime new DateTime 2016 11 16 15 0 0 11 16 2016 3 00 00 PM 使用它
  • 有哪些好的用户体验书籍? [关闭]

    Closed 这个问题是无关 目前不接受答案 我对创造更好的用户体验 UX 很感兴趣 市面上有很多书 哪些对软件工程师有用 我最喜欢的 程序员的用户界面设计作者 乔尔 斯波尔斯基 一本不错的程序员第一本书 那些会留在您脑海中并影响您的设计的
  • 如何检测交易已经开始?

    我正在使用 Zend Db 在事务中插入一些数据 我的函数启动一个事务 然后调用另一个也尝试启动事务的方法 当然失败了 我使用的是 MySQL5 所以 问题是 我如何检测交易已经开始 这是一段示例代码 try Zend Registry g
  • 使用 VBA HTML 从网页下载文件

    几个月来 我一直在拼命地尝试自动化一个过程 在这个过程中 csv 文件被下载 管理并保存在给定的位置 到目前为止 我只能使用 excel vba 打开网页并单击底部下载 csv 文件 但代码停止并需要手动干预才能完成 如果可能的话 我希望它
  • C/C++ 解析器如何工作?

    我花了很多时间研究 PHP 的解析器是如何工作的 它将 PHP 代码翻译为最终的 C 代码 但是 C 代码如何转换为可执行文件呢 BTW 如何从数学角度判断语言A是否可以以某种方式转换为语言B 这是一个非常伟大且非常深刻的问题 涉及计算机科
  • 从其他分支中挑选一组提交,跳过空提交

    我正在使用合并一堆提交cherry pick git rev list reverse something begin something end git cherry pick stdin 然后以错误消息结束 You are curren
  • 如何验证 vaadin 制作的表单中的字段

    我正在使用 vaadin 制作一个 Java 项目 现在我有一个用户注册表 如下所示 public class RegistrationComponent extends CustomComponent implements View pu