> you could always work it the other way and have no caching by default but
> allow people who know what they're doing to enable it for an application
> with something like
> IRequestCycleSettings#setCacheComponentVisibility(boolean).

This sounds more robust, so long as it can be controlled on a
per-request basis (i.e., you can configure it for a specific page and
state).

And don't forget about isEnabled too though it is more rare ;)

**
Martin

>
>
> Martin Makundi wrote:
>>
>> Well... I would not build in the cache because different components
>> could interact in a way that if someone prematurely calls the
>> isVisible method, it freezes in the wrong state. It is known, that the
>> isVisible is called multiple times for various reasons.
>>
>> **
>> Martin
>>
>> 2009/1/15 Jonathan Locke <jonathan.lo...@gmail.com>:
>>>
>>>
>>> not sure. it /ought/ to make sense to cache during the render cycle. but
>>> i
>>> have the eerie sense that this came up before, so maybe there's some
>>> reason
>>> why it can't be cached? (although even if there are some odd cases where
>>> it
>>> can't be, it seems like you could make a workaround for those cases ..)
>>>
>>>
>>> Scott Swank wrote:
>>>>
>>>> Is there a reason why the default behavior is not to cache the result
>>>> of isVisible()?  Are there cases where the result of isVisible() is
>>>> expected to change over the course of rendering?
>>>>
>>>> Would a JIRA w/ code be welcome, or is the current behavior required?
>>>>
>>>> Scott
>>>>
>>>> On Thu, Jan 15, 2009 at 10:23 AM, Jonathan Locke
>>>> <jonathan.lo...@gmail.com> wrote:
>>>>>
>>>>>
>>>>> I would be careful not to throw the baby out with the bath water here.
>>>>> The
>>>>> design decision you're making is push versus pull and implementing
>>>>> isVisible
>>>>> is often going to be a better design decision because it may be more
>>>>> clear
>>>>> that visibility state stays consistent for a given problem. If the
>>>>> performance actually shows up as a hotspot (don't prematurely
>>>>> optimize!),
>>>>> you can always do some appropriate caching of the value and still have
>>>>> it
>>>>> "pulled".
>>>>>
>>>>>
>>>>> Erik van Oosten wrote:
>>>>>>
>>>>>> In the thread "Where to process PageParameters" I was requested to
>>>>>> explain why I think you should not override isVisible, but rather
>>>>>> should
>>>>>> call setVisible in onBeforeRender (slide 100 in my presentation
>>>>>> http://www.grons.nl/~erik/pub/20081112%20Effective%20Wicket.pdf).
>>>>>>
>>>>>> There are 2 reasons, but only the second one is really important.
>>>>>>
>>>>>> -1- isVisible is called a lot. It is easily called ten times within 1
>>>>>> request
>>>>>>
>>>>>> So if you have anything processor intensive going on, it will be a
>>>>>> performance hit. Just doing a simple expression is of course no
>>>>>> problem.
>>>>>> (For fun, just set a breakpoint in something like
>>>>>> FeedbackPanel#isVisible and request a page that contains one.)
>>>>>>
>>>>>> -2- isVisible can make your model be reloaded multiple times within 1
>>>>>> request
>>>>>>
>>>>>> Consider the following case (pseudo code):
>>>>>>
>>>>>>   MyPanel(id, personId) {
>>>>>>      super(id, new CompoundPropertyModel(new
>>>>>> LoadableDetachablePersonModel(personId)));
>>>>>>      add( new Label("address") {
>>>>>>          @Override
>>>>>>          isVisible() {
>>>>>>              return getDefaultModel() != null;
>>>>>>          }
>>>>>>      });
>>>>>>   }
>>>>>>
>>>>>>
>>>>>> The label uses the property 'address' of a person to see if the label
>>>>>> should be visible. The person is retrieved by a
>>>>>> LoadableDetachableModel
>>>>>> subclass (LDM) and then wrapped by a CompoundPropertyModel (CPM).
>>>>>>
>>>>>> During the render phase, isVisible will delegate getting the address
>>>>>> property to the CPM and this model delegates it to the LDM. LDM will
>>>>>> load the person from the database only once (well until it is
>>>>>> detached).
>>>>>>
>>>>>> At the end of the render phase everything will be detached. But now
>>>>>> something weird happens. The problem is that isVisible is called
>>>>>> during
>>>>>> the detach phase, on the label /after/ the CPM (and therefore also the
>>>>>> LDM) are detached. As isVisible retrieves the model from the CPM, and
>>>>>> therefore from the LDM, it will trigger a reload of the person inside
>>>>>> the LDM.
>>>>>>
>>>>>> Now, as visibility is often (if not almost always) determined by a
>>>>>> business object (e.g. very often a LDM) I think it makes sense to
>>>>>> avoid
>>>>>> having to think about the situation described above, and just avoid it
>>>>>> all together.
>>>>>>
>>>>>> Note: I observed this behavior in Wicket 1.3 (1.3.3 I think). If it
>>>>>> works differently now, I would be very glad to withdraw this
>>>>>> recommendation.
>>>>>>
>>>>>> Regards,
>>>>>>      Erik.
>>>>>>
>>>>>> --
>>>>>> Erik van Oosten
>>>>>> http://day-to-day-stuff.blogspot.com/
>>>>>>
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> View this message in context:
>>>>> http://www.nabble.com/Why-you-should-not-override-isVisible-tp21474995p21483816.html
>>>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Why-you-should-not-override-isVisible-tp21474995p21484456.html
>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>
>>
>
> --
> View this message in context: 
> http://www.nabble.com/Why-you-should-not-override-isVisible-tp21474995p21485341.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to