如何在Vaadin 8中输入时间戳

我试图使用 DateTimeField 输入时间戳,但是在我的实体中,我具有 java.sql.timestamp 。将datetimefield转换为时间戳给出了错误

ConversionClass

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;
    }
}

这给出了无法将时间戳转换为结果的错误

yzhwyf 回答:如何在Vaadin 8中输入时间戳

您有两种可能性:

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

如果选择第二条路径,则必须知道Vaadin 8 DateTimeField管理的类型是Java 8 LocalDateTime 。您可以轻松执行以下操作来管理转换:

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

然后,您将可以在实体中使用名为 timestamp 的变量 java.sql.Timestamp

更新

由于您使用的是自定义转换器,因此需要将值包装到Vaadin转换器结果中。将值转换为结果不是解决方案,因为它们是完全不同类型的对象。您需要执行以下操作:

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

这给出了无法将时间戳转换为结果的错误

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

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

您应该改为Result.ok(Timestamp.valueOf(value));Result interface

本文链接:https://www.f2er.com/2826763.html

大家都在问