如何在 Vaadin 8 中输入时间戳

How to enter timestamp in Vaadin 8

我正在尝试使用 DateTimeField 输入 timestamp 但在我的实体中我有 java.sql.timestamp 。将日期时间字段转换为时间戳时出现错误

转化类

package com.vaadin.convertor;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import com.vaadin.data.Converter;
import com.vaadin.data.Result;
import com.vaadin.data.ValueContext;
@SuppressWarnings("serial")
public class StringTimestampConvertor implements Converter<LocalDateTime, 
Timestamp> {

@SuppressWarnings("unchecked")

public Result<Timestamp> convertToModel(LocalDateTime value, ValueContext 
 context) {
    Result<Timestamp> rs =  (Result<Timestamp>) Timestamp.valueOf(value);
    return rs;
}

@Override
public LocalDateTime convertToPresentation(Timestamp value, ValueContext 
 context) {
    // TODO Auto-generated method stub
    return null;
    }
}

这是错误,无法将时间戳转换为结果

你有两种可能:

  1. 评估以更改实体中的日期类型
  2. 管理日期的转换

如果选择第二条路径,你要知道Vaadin 8 DateTimeField管理的类型是Java 8 LocalDateTime。您可以像这样轻松地管理转换:

LocalDateTime localDateTime = myField.getValue();
Timestamp timestamp = Timestamp.valueOf(localDateTime);

然后您将准备好名为 timestamp 的变量 java.sql.Timestamp 以在您的实体中使用。

更新:

由于您使用的是自定义转换器,因此需要将值包装到 Vaadin 转换器结果中。将您的值转换为 Result 不是解决方案,因为它们是完全不同类型的对象。你需要做这样的事情:

public Result<Timestamp> convertToModel(LocalDateTime value, ValueContext 
    context) {
    return Result.ok(Timestamp.valueOf(value));
}

This is giving error that Timestamp cannot be casted into Result

这不是正确的转换方式(您不能将 Timestamp class 转换为 Result

Result<Timestamp> rs = (Result<Timestamp>) Timestamp.valueOf(value);

你应该这样做 Result.ok(Timestamp.valueOf(value)); (Result interface)