首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Vaadin8中自定义DateTimeField

在Vaadin8中自定义DateTimeField
EN

Stack Overflow用户
提问于 2017-10-15 15:28:18
回答 3查看 1.1K关注 0票数 2

在DateTimeField组件中,它同时显示日期(年、月、日)和小时(小时、分钟、秒)。现在我不想约会了。有没有办法只允许显示和获取时间(小时:分钟:秒)?

EN

回答 3

Stack Overflow用户

发布于 2017-10-16 02:50:33

tl;dr

从Vaadin 8.1开始,没有内置的方式只显示一天中的时间。

你可以做你自己的。

详细信息

现有的DateTimeField]()小部件只支持遗留的GregorianCalendar类,它是日期和时间加上时区的组合。因此对于仅限时间的值没有用处。

不幸的是,从Vaadin8.1开始,捆绑的字段小部件似乎还没有针对您想要的java.time.LocalTime等java.time类型进行更新。

作为缺少智能LocalTime-savvy字段的解决方法,我建议:

  • 试试吧。

add-on是一个可以添加到Vaadin项目中的扩展,用于提供一些与Vaadin相关的功能。附加组件可以是与可视小部件相关的,也可以是非可视后端功能。如果像这样可视化,您可能需要重新构建项目以重新创建小部件集。也许是Maven和releases).

  • Make (不确定,因为这项技术会随着你自己的不同的Vaadin clean而变化。使用常规文本字段。编写一个验证器,将用户输入parses作为LocalTime对象进行验证。您可以选择编写特定于Vaadin的验证器或标准的验证器。请参阅

示例

下面是一些用于创建您自己的LocalTime-savvy字段的粗略代码。这绝不是完整的,但可能会帮助您找到正确的方向。

代码语言:javascript
复制
final Label whenLabel = new Label( "when?" );
final TextField whenField = new TextField( );
whenField.setCaption( "When:" );
whenField.setValueChangeMode( ValueChangeMode.BLUR );
whenField.addValueChangeListener( new HasValue.ValueChangeListener < String >( )
{
    static final long serialVersionUID = 201710132100L;

    @Override
    public void valueChange ( HasValue.ValueChangeEvent < String > valueChangeEvent )
    {
        String input = whenField.getValue( );
        System.out.println( "input: " + input );
        try
        {
            // DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_TIME; // Constant ISO_LOCAL_TIME is for time-of-day in standard ISO 8601 format.
            // DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( Locale.CANADA_FRENCH ); // Automatically localize.
            DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( Locale.US ); // Automatically localize.
            LocalTime localTime = LocalTime.parse( input , f );
            String timeIso8601 = localTime.toString( );
            whenLabel.setValue( timeIso8601 );
        } catch ( DateTimeParseException e )
        {
            whenLabel.setValue( e.getClass().getCanonicalName() );
            System.out.println( "ERROR - failed to parse input: " + input );
        }
    }
} );
票数 1
EN

Stack Overflow用户

发布于 2020-06-04 15:38:17

在我的解决方案中,我使用了一个TextField,并在相关的绑定器中添加了一个自定义验证器:

代码语言:javascript
复制
.withValidator(this::validateTime, "Invalid time")

我实现了验证方法,如下所示:

代码语言:javascript
复制
private boolean validateTime(final String timeString) {

    try {
        LocalTime.parse(timeString);
        return true;
    } catch (final DateTimeParseException e) {
        return false;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-14 19:15:23

现在Vaadin14.2.x提供了新的DateTimePicker组件来解决这个问题。

https://vaadin.com/releases/vaadin-14

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

https://stackoverflow.com/questions/46752725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档