Wicket LambdaModel和NumberTextField无法解析类型

时间:2018-09-28 09:00:42

标签: wicket wicket-8

在我的Wicket 8应用程序中的一种表单中,切换到LambdaModel替代PropertyModel后,我未能提交测试,说明:

  

java.lang.ClassCastException:无法将java.lang.String强制转换为   java.math.BigDecimal

我的表单面板有一个NumberTextField,在我的工作方案中,该绑定到PropertyModel

此工作

form.add(new NumberTextField<BigDecimal>("myBigDecimalField", new PropertyModel<>(getModel(), "myBigDecimalField")));

这不起作用

form.add(new NumberTextField<BigDecimal>("myBigDecimalField", LambdaModel.of(getModel(), MyClass::getMyBigDecimalField, MyClass::setMyBigDecimalField)));

问题是LambdaModel不能像IObjectClassAwareModel那样实现PropertyModel,因此,当NumberTextField尝试解析AbstractTextComponent#152中的类型并随后进行检查时,在getModelType中,如果模型是IObjectClassAwareModel的实例,则它将不起作用,因为LambdaModel没有实现此接口。

这是否旨在LamdaModel不实施IObjectClassAwareModel。 顺便说一句,我知道我可以通过显式声明NumberTextField的类型类来解决此问题。

1 个答案:

答案 0 :(得分:2)

遗憾的是,从lambda检索任何类型信息非常困难。

请参阅此处以获取说明:

Java: how to resolve generic type of lambda parameter?

因此,现在建议将类型传递给组件。