I need to look better on which core components are relying on an updated
visibility/enabled state at the process event time, and why the last
rendered state wouldn't be enough to them to work nicely.

On Tue, Nov 30, 2010 at 3:19 PM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote:

> currently we only invoke configure before the render. this would mean
> we would have to invoke it before processing a listener, clearing the
> cache, and then invoking it again before render. i wonder if that is
> enough places to invoke it....
>
> -igor
>
> On Tue, Nov 30, 2010 at 9:15 AM, Pedro Santos <pedros...@gmail.com> wrote:
> > If user click an link, it will change the value of some property at the
> > process_event request cycle step. Then the processor will go to the
> respond
> > step, will invoke every component before render method which will end up
> > invoking the Component#configure and updating the visibility/enabled
> state
> > (even if it changes, we are able to work with the updated state). So when
> > the this component has the opportunity to render it self, it will be
> aware
> > its update state.
> >
> > On Tue, Nov 30, 2010 at 2:39 PM, Igor Vaynberg <igor.vaynb...@gmail.com
> >wrote:
> >
> >> there are other places that should be checked though. for example
> >> before we invoke a listener on the component we should check again to
> >> make sure that visibility hasnt changed. eg if visibility depends on
> >> some property of the user clicking the link that changed between
> >> render and clicking the link.
> >>
> >> -igor
> >>
> >> On Tue, Nov 30, 2010 at 8:30 AM, Pedro Santos <pedros...@gmail.com>
> wrote:
> >> > An implementation idea:
> >> >
> >> > Component {
> >> >    public final void configure()
> >> >    {
> >> >        if (!getFlag(FLAG_CONFIGURED))
> >> >        {
> >> >            setVisible_NoClientCode(isVisible()); //we only check the
> user
> >> > isVisible in here
> >> >            onConfigure();
> >> >            setFlag(FLAG_CONFIGURED, true);
> >> >        }
> >> >    }
> >> > }
> >> >
> >> > On Tue, Nov 30, 2010 at 2:16 PM, Igor Vaynberg <
> igor.vaynb...@gmail.com
> >> >wrote:
> >> >
> >> >> so how is it different if they can still override something that
> needs
> >> >> to be checked all the time?
> >> >>
> >> >> -igor
> >> >>
> >> >> On Tue, Nov 30, 2010 at 8:02 AM, Pedro Santos <pedros...@gmail.com>
> >> wrote:
> >> >> > 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
> >> >> >
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Pedro Henrique Oliveira dos Santos
> >> >
> >>
> >
> >
> >
> > --
> > Pedro Henrique Oliveira dos Santos
> >
>



-- 
Pedro Henrique Oliveira dos Santos

Reply via email to