gpt4 book ai didi

java - 如何使 Wicket 7 与 Java 8 中的 java.time 一起工作?

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:39 25 4
gpt4 key购买 nike

我有很多 bean,并且都使用 LocalDate 和 LocalDateTime。 Wicket 中的 DateTextField 和所有其他小部件(如 DatePicker)仅适用于 java.util.Date。有没有办法注入(inject)一个转换器到 Wicket 7 中,以便它使用 LocalDate 或 LocalDateTime?

bean 看起来像这样:

public class SomeBean {
Long id = null;
LocalDate since = null;
// plus getters and setters
}

Wicket 表单当前使用 CompoundPropertyModel

CompoundPropertyModel<SomeBean> model = new CompundPropertyModel<>( bean );

最佳答案

你可以包装你的 LocalDate等模型在 IModel<java.util.Date> ,例如

public static class LocalDateModel implements IModel<java.util.Date> {
private IModel<LocalDate> localDateModel;
public LocalDateModel(IModel<LocalDate> localDateModel){
this.localDateModel = localDateModel;
}


@Override
public Date getObject() {
return convertLocalDateToUtilDateSomehow(localDateModel.getObject());
}

@Override
public void setObject(Date object) {
localDateModel.setObject(convertUtilDateToLocalDateSomehow(object));
}

@Override
public void detach() {
localDateModel.detach();
}
}

如果您随后将这样的模型输入到您要使用的表单组件中,它应该可以正常工作。

如果你想要你的 CompoundPropertyModel要自动提供此类包装模型,您需要扩展它并覆盖它的 CompoundPropertyModel#wrapOnInheritance(Component component)推断需要包装模型的方法。有点像

@Override
public <C> IWrapModel<C> wrapOnInheritance(Component component)
{
IWrapModel<C> actualModel = super.wrapOnInheritance(component);
if (actualModel.getObject() instanceOf LocalDate) {
return new LocalDateModelButAlsoWrapping(actualModel);
} else {
return actualModel;
}
}

在哪里LocalDateModelButAlsoWrapping毫不奇怪,它只是 LocalDateModel 的延伸上面的示例,但它也实现了 IWrapModel<T> .

如果您使用此扩展程序而不是常规的 CompoundPropertyModel它会检测字段何时为 LocalDate并为包装成看起来像 DateTextField 的组件(例如您的 java.util.Date )提供模型模型。

虽然我给你的代码片段很脏(你可能不应该让模型对象推断它的类型)因为我提供它只是为了说明一般机制,所以我建议你设计自己的方式来推断预期的对象类型(例如,您可以检查 Component 参数是否为 DateTextField ),但这是我可以想象的解决方案的总体方向。

关于java - 如何使 Wicket 7 与 Java 8 中的 java.time 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39162334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com