On Tue, May 23, 2017 at 11:17 PM, Martin Grigorov <[email protected]>
wrote:

> Hi,
>
> On Tue, May 23, 2017 at 5:40 PM, Ihmehlmenn <[email protected]> wrote:
>
>> Hello everyone,
>>
>> while trying out some of the very cool new features in Wicket 8,
>> specifically replacing PropertyModels with lambda expressions, I had a few
>> questions coming up. Most of them have been answered by the great guide
>> provided, but following things are still a bit unclear to me:
>>
>
> Thank you for testing the milestone release and for the feedback!
>
>
>>
>> 1) Read-Only Models
>> Let's say I want to replace the following PropertyModel for showing the
>> "name" property of a Person obejct in a Label
>>
>>   new PropertyModel<String>(personModel, "name");
>>
>> with a lambda expression. Which of the following would be the best
>> approach
>> and why?
>>
>>   LambdaModel.of(personModel, Person::getName);
>>
>
> This way of using LambdaModel is indeed the same as the second way. The
> advantage LambdaModel has is that you can also set a value when you use the
> method with the Supplier.
>
>
>>   personModel.map(Person::getName);
>>   personModel.flatMap(...); // not quite sure yet when to use this one.
>> See
>> next question as well
>
>
>> The first two options seem to be identical at the first glance but I
>> noticed
>> that the LambdaModel does call detach() on the underlying base model (just
>> like the PropertyModel does), whereas the model created by the map()
>> method
>> doesn't seem to do that.
>>
>
> This is a good point!
> I think it is a bug that should be fixed!
>

Actually here we use closure so adding #detach() is not possible unless the
body is rewritten to instantiate an IModel with #getObject() and #detach()
impls.
I am not sure it is worth it.
@Devs WDYT ? Do we need to implement #detach() in #map(), #filter(), etc ?


>
>
>>
>>
>> 2) Readable/Writeable Models
>> The documentation has the following example for mapping a model to a
>> readable/writeable model of a property
>>
>>   IModel<String> personNameModel = personModel.flatMap(targetPerson ->
>>   LambdaModel.of(
>>     () -> targetPerson::getName, targetPerson::setName
>>   ));
>>
>> Why is the call to flatMap() needed? Isn't just using the LambdaModel the
>> same but shorter?
>>
>>   IModel<String> personNameModel = LambdaModel.of(personModel,
>> Person::getName, Person::setName);
>>
>
> IModel#flatMap() is like java.util.Optional#flatMap().
> It is useful when you already have another IModel impl that knows how to
> set/get the name of a person.
> LambdaModel#of(IModel<X>, SerializableFunction<X,R>,
> SerializableBiConsumer<X,R>) is an easy way to create such IModel impl by
> using Java 8 lambdas.
> We should cross-reference them in the javadoc!
>
> Another discussion on this topic: http://markmail.org/
> message/m6l2w3ryqbdew2co
>
>
>>
>>
>> 3) Constants in Models
>> In some cases I need to set a static constant value as read only model in
>> a
>> component. Up until now I simply used
>>    Model.of(Constants.MY_STATIC_VALUE);
>> which probably results in the value being serialised into the session of
>> the
>> user.
>>
>
> The model and its content are serialized with the page.
> The page is stored in the http session only after being rendered. Once you
> move to another stateful page it is replaced by it and from there on it is
> stored only on the disk.
>
>
>>
>> Am I assuming correctly, that using following lambda expression as model
>> is
>> more "efficient", since the static constant isn't serialised anymore this
>> way?
>>   () -> Constants.MY_STATIC_VALUE;
>>
>
> Correct!
> The static constant won't be serialized but the closure will be.
> So this version should be close memory-wise to using AbstractReadOnlyModel
> for this use case but anonymous inner classes have a reference to the outer
> instance and afaik lambdas don't have it.
>
>
>>
>>
>> Thanks to everybody pouring so much time into developing Wicket!
>>
>> Daniel Radünz
>>
>> --
>> View this message in context: http://apache-wicket.1842946.n
>> 4.nabble.com/Questions-regarding-Wicket-8-and-lambda-express
>> ions-for-models-tp4677918.html
>> Sent from the Users forum mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>>
>

Reply via email to