Wicket LambdaModel 和 NumberTextField 无法解析类型
Wicket LambdaModel and NumberTextField cannot resolveType
在我的 Wicket 8 应用程序中的一个表单中切换到 LambdaModel
作为 PropertyModel
的替代方案后,我提交测试失败,说明:
java.lang.ClassCastException: java.lang.String cannot be cast to
java.math.BigDecimal
我的表单面板有一个 NumberTextField
,在我的 working 场景中绑定到 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
没有像 PropertyModel
那样实现 IObjectClassAwareModel
,因此当 NumberTextField
试图解析 AbstractTextComponent#152
中的类型时,随后检查 getModelType
如果模型是 IObjectClassAwareModel
的实例它将不起作用,因为 LambdaModel
没有实现此接口。
这是为了LamdaModel
不实现IObjectClassAwareModel
。
顺便说一句,我知道我可以通过显式声明 NumberTextField
.
的类型 class 来解决这个问题
遗憾的是,很难从 lambda 中检索任何类型信息。
请看这里的解释:
Java: how to resolve generic type of lambda parameter?
所以现在建议将类型传递给组件。
在我的 Wicket 8 应用程序中的一个表单中切换到 LambdaModel
作为 PropertyModel
的替代方案后,我提交测试失败,说明:
java.lang.ClassCastException: java.lang.String cannot be cast to java.math.BigDecimal
我的表单面板有一个 NumberTextField
,在我的 working 场景中绑定到 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
没有像 PropertyModel
那样实现 IObjectClassAwareModel
,因此当 NumberTextField
试图解析 AbstractTextComponent#152
中的类型时,随后检查 getModelType
如果模型是 IObjectClassAwareModel
的实例它将不起作用,因为 LambdaModel
没有实现此接口。
这是为了LamdaModel
不实现IObjectClassAwareModel
。
顺便说一句,我知道我可以通过显式声明 NumberTextField
.
遗憾的是,很难从 lambda 中检索任何类型信息。
请看这里的解释:
Java: how to resolve generic type of lambda parameter?
所以现在建议将类型传递给组件。