После переключения на LambdaModel
в качестве альтернативы PropertyModel
в одной из моих форм в приложении Wicket 8 я не могу отправить тесты, в которых говорится:
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
.