- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Wicket 8 应用程序中的一个表单中切换到 LambdaModel
作为 PropertyModel
的替代方案后,我没有提交测试说明:
java.lang.ClassCastException: java.lang.String cannot be cast to java.math.BigDecimal
我的表单面板有一个 NumberTextField
,在我的工作 场景中它被绑定(bind)到一个 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
没有实现这个接口(interface)。
这是否意味着 LamdaModel
不会实现 IObjectClassAwareModel
。顺便说一句,我知道我可以通过显式声明 NumberTextField
的类型类来解决这个问题。
最佳答案
遗憾的是,很难从 lambda 中检索任何类型信息。
请看这里的解释:
Java: how to resolve generic type of lambda parameter?
因此目前建议将类型传递给组件。
关于Wicket LambdaModel 和 NumberTextField 无法解析类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52551806/
在我的 Wicket 8 应用程序中的一个表单中切换到 LambdaModel 作为 PropertyModel 的替代方案后,我没有提交测试说明: java.lang.ClassCastExcept
我是一名优秀的程序员,十分优秀!