1
在DateTimeField组件中,它显示日期(年,月,日)和小时(小时,分钟,秒)。 现在我不想得到日期。任何想法只允许显示和获得时间(小时:分钟:秒)?在Vaadin中自定义DateTimeField 8
在DateTimeField组件中,它显示日期(年,月,日)和小时(小时,分钟,秒)。 现在我不想得到日期。任何想法只允许显示和获得时间(小时:分钟:秒)?在Vaadin中自定义DateTimeField 8
没有内置的方式来显示时间的一天而已,至于Vaadin 8.1。
你可以自己做。
详细现有DateTimeField
]()插件仅支持遗留GregorianCalendar
类,这是一日期和一个时间 - 日期加的时区的组合。因此对于仅限于时间的值而言没有用处。
不幸的是,从Vaadin 8.1起,似乎捆绑的字段小部件尚未更新为java.time类型,例如您想要的java.time.LocalTime
。
至于缺智能LocalTime
-savvy场的解决办法,我建议要么:
clean
和install
(不确定,因为这种技术会随着Vaadin的各种版本而不断变化)。LocalTime
对象。您可以选择编写一个Vaadin专用验证程序或标准验证程序Bean Validation。请参阅How to add Validators in Vaadin 8?下面是创建自己的LocalTime
-savvy领域的一些粗糙的代码。这绝不是完整的,但可能会帮助您指出正确的方向。
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 =0L;
@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);
}
}
});