Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Vaadin 8中添加验证器?

如何在Vaadin 8中添加验证器?
EN

Stack Overflow用户
提问于 2017-02-27 17:18:38
回答 3查看 11.9K关注 0票数 11

在Vaadin7中有一个addValidator函数,但在Vaadin8中不存在。

Vaadin 7示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   TextField user = new TextField("User:");
   user.setRequired(true);
   user.setInputPrompt("Your username");
   user.addValidator(new NullValidator("Username can't be empty", false));
   user.setInvalidAllowed(false);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-27 17:32:47

我在这里找到了答案:Whats New

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new Binder<Person>().forField(tf)
    .withValidator(str -> str.length() == 4, "Must be 4 chars")
    .withConverter(new StringToIntegerConverter("Must be Integer"))
    .withValidator(integer -> integer.equals(2017), "Wrong date")
    .bind(Person::getBirthYear, Person::setBirthYear);

票数 19
EN

Stack Overflow用户

发布于 2017-03-24 07:30:09

accepted Answer by Diego D显示正确。这段代码似乎摘自Vaadin公司Type safe validation before and after converters发布的这段非常简短(3分钟)但非常有用的视频。展示了新的Vaadin 8验证方法。我将添加一些注释,显示扩展的语法,并提供完整的示例代码来实现完整的应用程序。

验证器+绑定器

在Vaadin8中,一个很大的区别是验证器需要 。在过去,您可以将验证器附加到字段,但现在在Vaadin8中,您只能将验证器附加到绑定器。Vaadin团队认识到,对于一些简单的情况,这种对绑定器的要求可能会被证明是恼人的,但在大多数情况下,他们明智地预计需要验证的情况很可能也会进行绑定。我相信,这是一种非常合乎逻辑的反思。在另一个Vaadin公司的视频Webinar: What's new in Vaadin 8?中讨论过。

验证和转换器

我们定义了两个不同的验证器,一个在转换器转换用户的数据输入之前调用,另一个在转换后调用。因此,流畅风格的withValidatorwithConverter方法调用的顺序是纠正这里的行为的关键。当然,beforeConversionafterConversion对于验证器对象来说不是很好的名称,但这样做是为了明确在本演示中在转换器之前或之后运行的意图。

Lambda synax可选

一个验证器使用传统的Java代码风格覆盖方法。另一个验证器使用Lambda语法。观看视频并查看the Diego D Answer,了解使用单行Lambda参数进一步简化的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.example.valapp;

import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.data.Binder;
import com.vaadin.data.ValidationResult;
import com.vaadin.data.Validator;
import com.vaadin.data.ValueContext;
import com.vaadin.data.converter.StringToIntegerConverter;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.*;

import javax.servlet.annotation.WebServlet;


/**
 * This UI is the application entry point. A UI may either represent a browser window
 * (or tab) or some part of a html page where a Vaadin application is embedded.
 * <p>
 * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be
 * overridden to add component to the user interface and initialize non-component functionality.
 */
@Theme ( "mytheme" )
public class MyUI extends UI {

    @Override
    protected void init ( final VaadinRequest vaadinRequest ) {

        final TextField tf = new TextField ( "Enter year of birth:" );

        Validator<String> beforeConversion = new Validator < String > ( ) {
            @Override
            public ValidationResult apply ( String s, ValueContext valueContext ) {
               if(s.length ()!= 4) {
                   return  ValidationResult.error ( "Year must consist of 4 digits" );
               } else {
                   return  ValidationResult.ok () ;
               }
            }
        } ;

        Validator<Integer> afterConversion = Validator.from ( value -> value.equals ( 2017 ), "Wrong year." );

        new Binder < Person > ( )
                .forField ( tf )
                .withValidator ( beforeConversion )
                .withConverter ( new StringToIntegerConverter ( "Input must be Integer" ) )
                .withValidator ( afterConversion )
                .bind ( Person:: getYearOfBirth, Person:: setYearOfBirth );

        Button button = new Button ( "Tell me" );
        button.addClickListener ( event -> Notification.show("This is the caption", "This is the description", Notification.Type.HUMANIZED_MESSAGE) );

        setContent ( new VerticalLayout ( tf  , button ) );
    }

    @WebServlet ( urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true )
    @VaadinServletConfiguration ( ui = MyUI.class, productionMode = false )
    public static class MyUIServlet extends VaadinServlet {
    }
}
票数 4
EN

Stack Overflow用户

发布于 2018-03-07 23:47:34

如果由于创建动态表单而没有活页夹怎么办?

Vaadin 8.1支持移除支持动态表单的字段的绑定器。如果您使一个字段不可见,则删除该字段的绑定器。当您使字段可见时,重新添加绑定器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42491883

复制
相关文章
java poi拆分excel文件,每个文件保留标题行
在工作中,经常需要处理excel文件,将提供的excel文件导入数据库,有时候文件太大我们就需要做拆分了,下面实现将xlsx文件和xls文件按行数拆分,每个文件都保留标题行。这篇文件接着前面拆分csv大文件进行学习。
jiankang666
2022/05/12
8580
java实现csv大文件拆分,每个小文件都有标题行
开发中,我们经常需要导入csv文件到数据库中,但是如果csv文件太大了,可能会报错,这时候可以对csv文件进行拆分,分批导入。本节就以spring boot项目为例实现csv大文件拆分并输出拆分后的zip包。
jiankang666
2022/05/12
1.7K0
java实现csv大文件拆分,每个小文件都有标题行
Python提取Word文件中的目录标题保存为Excel文件
《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年1月第6次印刷,山东省一流本科课程“Python应用开发”配套教材,清华大学出版社2020年度畅销图书(本书第二版为2019、2020年度畅销图书)
Python小屋屋主
2021/03/16
2.5K0
Python提取Word文件中的目录标题保存为Excel文件
Power Query清洗标题行错位的数据
案例来源于一位同学的一种设备,去敏后格式如下:指标涉及100多个,每次测量的指标不一样,也就是说,设备除了“数据编号”外,其他标题名称错位存放于同一工作表中。另外,每个编号的条目数量(行数)不一样,大部分1条,但有的是2条或3条。
wujunmin
2021/09/27
1.2K0
如何利用Power Query实现错位行的标题提升?
因为里面涉及列中套列,所以使用List.Skip的话是针对需要处理列里面的明细列进行。这里会用到List{}的方式进行定位,通过List.Transform来进行循环。因为这里是循环3次,而且是从0开始,也就是0-2定位列表里的内容。
逍遥之
2020/03/24
2.9K0
如何利用Power Query实现错位行的标题提升?
慎用SharePoint.Files,在Power BI中更快地刷新Excel文件
最近在修改很久之前做的一个模型,发现仅仅只有3个excel文件,却刷新了1分21秒:
陈学谦
2021/12/01
5.6K0
慎用SharePoint.Files,在Power BI中更快地刷新Excel文件
从Excel角度理解Power Pivot中的行上下文
这种就代表绝对引用,我们把相对引用的公式下拉后,他会自动根据移动的情况来进行转换;而绝对引用给的公式在下拉后就不会进行变化。
逍遥之
2020/03/24
1.1K0
从Excel角度理解Power Pivot中的行上下文
使用Python批量实现某一Excel文件中每3行数据存一个Excel文件
前几天在帮助粉丝解决问题的时候,遇到一个简单的小需求,这里拿出来跟大家一起分享,后面再次遇到的时候,可以从这里得到灵感。
Python进阶者
2023/03/02
7540
使用Python批量实现某一Excel文件中每3行数据存一个Excel文件
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
Step 1: 打开Developer Tab找到VBA (快捷键 Alt+F11)
繁华是客
2023/03/03
3.9K0
优化Power BI中的Power Query合并查询效率:每个Query最高256MB内存限制的说明
关于优化Power BI中的Power Query合并查询效率,之前写过三篇文章:
陈学谦
2020/06/17
5.4K0
没有标题
没有标题 这是一个 vscode image.png 这是一个 code-server image.png 这是一个 jupyter image.png 这是一个魔改版的 jupyter image
XRSec
2022/03/17
1.8K0
没有标题
Python使用9行代码批量合并Excel文件
批量合并相同格式的Excel文件,Python只需要9行代码,并且格式优美,请跟我来。
统计学家
2019/12/04
1.6K0
Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)
上一篇文章,我们抛出了一个问题,这篇文章来进行解答。如果针对文件夹及其子文件夹下的子文件夹不同的Excel表名,而且Excel表格类型包括了.xls和.xlsx应该如何处理?要求一步到位。
Python进阶者
2023/09/02
2130
Python自动化对每个文件夹及其子文件夹的Excel表加个表头(Excel不同名且有xls文件)
linux镜像文件没有gho,【iso文件中没有gho文件】iso变gho_iso文件里没有gho-系统城…
gho文件是ghost系统的克隆镜像,存储着系统分区的所有文件信息,可用于安装系统,有些U盘安装方法需要把ISO镜像中的gho文件拷贝到U盘,那么gho文件在哪里呢?ISO镜像中的gho文件是哪个呢?下面系统城小编就跟大家分析一下。
全栈程序员站长
2022/09/14
8.4K0
Python3实现两个Excel文件内容
最近在工作中,需要人工比对大量的excel格式报表,刚好刚学了Pyhon入门基础知识,想着写个东西练练手,不但能提高代码编写能力,还能减轻工作量,提高工作效率。说干就干,简单的理了逻辑。首先,将目标表和源表的内容分别写入到字典中,Excel表中不确定有没有字段是唯一值,所以选择了行号作为key值,一行的内容放到list中,然后从源表中取一行去目标表中遍历。想好之后开始敲代码了,在代码编写过程中遇到很多的问题,都是遇到一个查一个。基本的比对功能实现后,就想着在加个日志记录下比对结果。写下此文记录下,just do it. 下面是全部代码
py3study
2020/01/03
5830
excel如何打开100万行以上的csv文件
正常情况下,2007版本以上的excel打开的csv文件,最多只能显示1048576行数据,如果我们恰好有一个超大csv文件行数超过这个量级,该如何解决呢,可以使用power query来解决。
全栈程序员站长
2022/09/16
10.2K0
excel如何打开100万行以上的csv文件
Excel Power Query学习:如何合并两个Excel工作簿
Excel Power Query功能强大,但我一直没有涉足,因为Excel太博大精深了,光是Excel本身的功能、Excel公式与函数、VBA就够研究的了。然而,新的东西总是要接触的,毕竟也是Excel的一部分。后续会学习一些这方面的知识并与大家分享。本文主要学习整理自stringfestanalytics.com,供参考。
fanjy
2022/11/16
2K0
Excel Power Query学习:如何合并两个Excel工作簿
如何在Power Query中批量修改标题?
如果要更换标题需要涉及到的函数是Table.RenameColumns;获取标题的函数Table.ColumnNames。
逍遥之
2020/03/24
2.9K0
如何在Power Query中批量修改标题?
uniq命令 – 去除文件中的重复行
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行。去除了重复的,保留的都是唯一的,也就是独特的,唯一的了。
用户4988085
2021/07/24
3K0
Power Query 真经 - 第 1 章 - 基础知识
Power Query 的设计目的就是在业务分析师使用数据之前将数据加载到目标区域的表中。收集数据并将其重塑为所需的格式,Power Query 处理数据的基本流程,如图 1-1 所示。
BI佐罗
2022/04/02
5.1K0
Power Query 真经 - 第 1 章 - 基础知识

相似问题

在Power查询中合并Excel文件

25

Excel power查询文件夹路径

13

Power查询中的列行到列标题

11

同时读取两个文件,每个文件都有要跳过的标题行。

13

使用Power Automate比较两个Excel文件

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文