a method call of
LambdaModel.of(this::getModelObject, this::setModelObject)
refers to
public static <X, R> IModel<R> of(IModel<X> target, SerializableFunction<X, R> getter)
but should be
public static <R> IModel<R> of(SerializableSupplier<R> getter, SerializableConsumer<R> setter)
The problem is that IModel and SerializableSupplier have functionally the same interface:
T getObject(); vs. T get();
Background:
The child component should share its default model object with its parent component's default model object. So if setDefaultModelObject is called on the parent component than the child component should also refer to the new value (and with versa).
Workaround:
public Parent(String wicektId, IModel<Role> roleModel) {
IModel<Role> childRoleModel = new IModel<Role>() {
@Override
public Role getObject()
@Override
public void setObject(Role object)
};
add(new Child("child", childRoleModel));
}
Solution:
The problem only exists because .of Method is overloaded. If both methods would have different names (or be in different classes) than the compiler would be fine.
Please see attached files