在我的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
的类型类来解决此问题。
答案 0 :(得分:2)
遗憾的是,从lambda检索任何类型信息非常困难。
请参阅此处以获取说明:
Java: how to resolve generic type of lambda parameter?
因此,现在建议将类型传递给组件。