Jus to get it right ... is the following statement correct?

"isVisible() will work as expected when the criteria for visibility does not 
change during render"


Am 30.11.2010 um 17:02 schrieb Pedro Santos:

> I understand the concern about possible isVisible implementations like
> 
> isVisible(return currentlyTime < 10:00:00;) //imagine this component being
> rendered at 09:59:59
> isVisible(return dao.list().size() > 0);// performance issues
> 
> But maybe we can have the best from both approaches. This is an copy/paste
> from java.awt.Component:
> 
>    public boolean isVisible() {
>        return isVisible_NoClientCode();
>    }
>    final boolean isVisible_NoClientCode() {
>        return visible;
>    }
> 
> There are some points in the awt framework were the isVisible method is not
> used in benefit of isVisible_NoClientCode
> I'm in favor of create an final isVisible/Enabled version and change the
> Wicket core to use it. Also maintain the hotspot to users provide their
> isVisible/Enable implementations that will serve to feed the core component
> state.
> 
> On Mon, Nov 29, 2010 at 4:56 PM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote:
> 
>> ive run into plenty of weird problems with overrides, but maybe
>> because this was in a high concurrency app where data changed
>> frequently. the problems arise from the fact that the value returned
>> from isvisible() can change while we are doing traversals, etc.
>> 
>> eg we run a traversal for all visible components and put them in a
>> list. later we iterate over the list and try to render these
>> components. the render function also checks their visibility and if
>> they are no longer visible it throws an exception.
>> 
>> if isvisible() override depends on some external factor like the
>> database there is a small window where the value can change and now
>> you can have a weird exception: such as "tried to invoke a listener on
>> a component that is not visible or not enabled". these are very
>> intermittent and damn near impossible to reproduce.
>> 
>> another problem is performance. isvisible() is called multiple times
>> during the request and if it depends on the database it can be a
>> performance problem. in fact a couple of users have complained about
>> this on the list in the past. at least now we have an easy solution
>> for them - use onconfigure().
>> 
>> so as of right now the developers have two choices: override
>> isvisible() and potentially suffer the consequences. or, override
>> onconfigure() and set visibility there in a more deterministic
>> fashion.
>> 
>> -igor
>> 
>> 
>> 
>> On Mon, Nov 29, 2010 at 10:21 AM, Eelco Hillenius
>> <eelco.hillen...@gmail.com> wrote:
>>> To expand, unless I'm missing something (new?), things are really only
>>> problematic when both the mutable value and the override are mixed. In
>>> a way, I think that using the override is 'more pure', as it's a
>>> simple function that is executed when needed, whereas mutable state
>>> can be harder to deal with when trying to figure out how it got to be
>>> in that state. So, sorry Igor, but we disagree on this one.
>>> 
>>> Eelco
>>> 
>>> 
>>> On Mon, Nov 29, 2010 at 10:13 AM, Eelco Hillenius
>>> <eelco.hillen...@gmail.com> wrote:
>>>> Niether is evil. It has potential pitfalls, which you should just be
>>>> aware of. We use such overrides all over the place and never have
>>>> problems with them either. :-) Avoiding it is safer, but also more
>>>> verbose (in 1.3.x at least).
>>>> 
>>>> Eelco
>>>> 
>>>> On Mon, Nov 29, 2010 at 9:49 AM, Igor Vaynberg <igor.vaynb...@gmail.com>
>> wrote:
>>>>> On Mon, Nov 29, 2010 at 9:35 AM, Sven Meier <s...@meiers.net> wrote:
>>>>>> Hi Douglas,
>>>>>> 
>>>>>> WICKET-3171 describes a problematic case, where visibility of a
>>>>>> component changes while its form is being processed.
>>>>>> In our projects we're overriding isVisible() where appropriate and
>> never
>>>>>> encountered a similar problem.
>>>>>> 
>>>>>> I'd say WICKET-3171 is the rare 5% usecase. What's next, is overriding
>>>>>> isEnabled() going to be declared evil too? ;)
>>>>> 
>>>>> yes
>>>>> 
>>>>> -igor
>>>>> 
>>>>>> 
>>>>>> Sven
>>>>>> 
>>>>>> On Mon, 2010-11-29 at 11:22 -0600, Douglas Ferguson wrote:
>>>>>> 
>>>>>>> Can you explain why? We have done this all over the place.
>>>>>>> 
>>>>>>> D/
>>>>>>> 
>>>>>>> On Nov 29, 2010, at 10:00 AM, Martin Grigorov wrote:
>>>>>>> 
>>>>>>>> The recommended way since a few 1.4 releases is to override
>> onConfigure()
>>>>>>>> and call setVisible(true|false) depending on your conditions.
>>>>>>>> 
>>>>>>>> On Mon, Nov 29, 2010 at 4:49 PM, Douglas Ferguson <
>>>>>>>> doug...@douglasferguson.us> wrote:
>>>>>>>> 
>>>>>>>>> Igor posted a comment to this bug saying that overriding
>> isVisible() is
>>>>>>>>> "evil"
>>>>>>>>> 
>>>>>>>>>      https://issues.apache.org/jira/browse/WICKET-3171
>>>>>>>>> 
>>>>>>>>> I was surprised by this and am curious to hear more.
>>>>>>>>> 
>>>>>>>>> D/
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 
> 
> 
> -- 
> Pedro Henrique Oliveira dos Santos

Reply via email to