3

在我的 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没有实现IObjectClassAwareModelPropertyModel因此当NumberTextField尝试解析类型AbstractTextComponent#152并随后检查getModelType模型是否是它的实例 IObjectClassAwareModel时将不起作用,因为LambdaModel没有实现此接口。

这是LamdaModel不是有意为之IObjectClassAwareModel。顺便说一句,我知道我可以通过显式声明NumberTextField.

4

1 回答 1

2

遗憾的是,很难从 lambda 中检索任何类型信息。

请参阅此处以获取说明:

Java:如何解析 lambda 参数的泛型类型?

所以现在建议将类型传递给组件。

于 2018-09-28T17:59:35.090 回答