Thank you, Bas! Fully agree with you that if setters is to set something on a main target object. In my particular case, I tried to use LambdaModel for "conversion" between one type and another. So targetModel contain original object and LambdaModel just wrap and convert correspondingly. Also I tried to use exactly that method, because if targetModel is provided to LambdaModel - it manages lifecycle and invoke onDetach when it's applicable. Use of `public static <R> IModel<R> of(SerializableSupplier<R> getter, SerializableConsumer<R> setter)` is not so convenient in this case, because target model is out of required lifecycle.
Thanks, Ilia --------------------------------------------- Orienteer(http://orienteer.org) - open source Business Application Platform On Thu, Nov 8, 2018 at 11:41 PM Bas Gooren <b...@iswd.nl> wrote: > Hi, > > The LambdaModel method you are referring to is dependant on another model: > > public static <X, R> IModel<R> of(IModel<X> target, > SerializableFunction<X, R> getter, SerializableBiConsumer<X, R> setter) > > Since the setter depends on the target model, the target model object > needs to be non-null for the setter to be able to do anything (you can’t > set a property on a null object reference). > > If I look at the current master branch [1], I see that the functionality > you probably are looking for is present: > > public static <R> IModel<R> of(SerializableSupplier<R> getter, > SerializableConsumer<R> setter) > > … which is simply a model which delegates getting and setting the value to > the specified supplier and consumer, without having a target model. > > 1) > https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/model/LambdaModel.java > > Met vriendelijke groet, > Kind regards, > > Bas Gooren > > Op 9 november 2018 bij 08:30:39, Илья Нарыжный (phan...@ydn.ru) schreef: > > Hello, > > How it was expected to use LambdaModel with setters? > Right now it seems to be not quite usable, because, of the following code > inside: > > @Override > public void setObject(R r) > { > X x = target.getObject(); > if (x != null) > { > setter.accept(x, r); > } > } > > As you can see, if previous value of target model is null, there is no way > to change it. Why? > And also it will be interesting to know why SerializableBiConsumer was > used > for a setter? > > Thanks, > Ilia > > --------------------------------------------- > Orienteer(http://orienteer.org) - open source Business Application > Platform > >