On Wed, Nov 24, 2010 at 2:24 PM, Johan Compagner <jcompag...@gmail.com>wrote:

> And then completely remove the check if the component is disabled i guess?
>

exactly


> That would work for me but then if users dont really call super() when
> they have there own enable logic that would mean it would always be
> called..
> (because now it just returns true so people could think i dont need to
> call super)
>

I know, but I still think that the behavior state is the more important one.
I would not be concerned with custom isEnabled implementations, they will
just became more important.


>
> On Wed, Nov 24, 2010 at 17:21, Pedro Santos <pedros...@gmail.com> wrote:
> > Why don't simple change the AbstractBehavior default isEnabled
> > implementation to respect the component state, like:
> >
> >    public boolean isEnabled(Component component)
> >    {
> >        return component.isEnabled();
> >    }
> >
> > It would solve the problem at the ticket. IMO the proposed interface is
> > prolix because the behavior enabled/disabled state is enough information
> to
> > decide to silent return or not an ajax call to it.
> >
> > On Wed, Nov 24, 2010 at 2:12 PM, Johan Compagner <jcompag...@gmail.com
> >wrote:
> >
> >> yes that i did see in 1.5
> >> but in 1.4 i guess the only thing we can do is just introduce that
> >> IIgnoreDisabledComponentBehavior interface (that doesnt have any
> >> method)
> >>
> >> (or something the same with a different name, any recomendations?)
> >>
> >> johan
> >>
> >>
> >> On Wed, Nov 24, 2010 at 16:57, Igor Vaynberg <igor.vaynb...@gmail.com>
> >> wrote:
> >> > i added boolean canCallListenerInterface(Component component) to
> >> ibehavior
> >> >
> >> > -igor
> >> >
> >> > On Wed, Nov 24, 2010 at 12:54 AM, Johan Compagner <
> jcompag...@gmail.com>
> >> wrote:
> >> >> which method name?
> >> >>
> >> >> I currently only have a tagging interface that tags this behavior...
> >> >>
> >> >> On Wed, Nov 24, 2010 at 03:00, Igor Vaynberg <
> igor.vaynb...@gmail.com>
> >> wrote:
> >> >>> i just fixed it in trunk. in 1.4 we dont really have a choice but to
> >> >>> add the mixin interface, but can you at least make the method name
> >> >>> match?
> >> >>>
> >> >>> cheers,
> >> >>> -igor
> >> >>>
> >> >>> On Tue, Nov 23, 2010 at 1:04 PM, Johan Compagner <
> jcompag...@gmail.com>
> >> wrote:
> >> >>>> that i find a big hack
> >> >>>> then i need to have some none visible (in html not in java) label
> or
> >> >>>> something.. thats horrible then i need to add all kinds of stuff.
> >> >>>>
> >> >>>> I just want that behavior is executed. by a call. that call is not
> a
> >> >>>> user event (at least not directly)
> >> >>>> it is just (in this example) a resize event that is unrelated to
> the
> >> >>>> component being disabled. Disabled is just the look in the ui it
> >> >>>> doesnt mean that resizing shouldnt happen
> >> >>>>
> >> >>>> I get that disabled behaviors shouldnt work, i also get that
> behaviors
> >> >>>> shouldnt work on none visible components (there is no ui)
> >> >>>> but disabled components is just a visual thing. that doesnt mean
> that
> >> >>>> really all events are also disabled.
> >> >>>>
> >> >>>> for example in Swing on a button yes the click event
> (ActionListenter)
> >> >>>> is disabled but a ComponentListener (add/remove) still will work
> >> >>>> fine..
> >> >>>>
> >> >>>> johan
> >> >>>>
> >> >>>>
> >> >>>> On Tue, Nov 23, 2010 at 21:52, Martin Grigorov <
> mgrigo...@apache.org>
> >> wrote:
> >> >>>>> On Tue, Nov 23, 2010 at 11:02 AM, Johan Compagner <
> >> jcompag...@gmail.com>wrote:
> >> >>>>>
> >> >>>>>> i am currently using this patch for our wicket code so that we
> can
> >> move
> >> >>>>>> on..
> >> >>>>>>
> >> >>>>>>
> >> >>>>>> First check is that if it is an ajax request for that behavior
> then
> >> >>>>>> just throw an abort exception..
> >> >>>>>> Dont just return null because the constantly a full page render
> is
> >> >>>>>> done instead of the ajax behavior request.
> >> >>>>>>
> >> >>>>>> Second is that i introduced an tagging interface so that
> behaviors
> >> can
> >> >>>>>> make them self work for disabled components if they want to.
> >> >>>>>>
> >> >>>>>> anybody a better idea?
> >> >>>>>>
> >> >>>>> What about adding a companion component for the resize logic ?
> I.e.
> >> the
> >> >>>>> ListView will be disabled, but the companion component will fire
> and
> >> repaint
> >> >>>>> the ListView if necessary. This way you explicitly say that you
> want
> >> to
> >> >>>>> modify disabled component.
> >> >>>>>
> >> >>>>>>
> >> >>>>>> johan
> >> >>>>>>
> >> >>>>>> ### Eclipse Workspace Patch 1.0
> >> >>>>>> #P wicket
> >> >>>>>> Index:
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/behavior/IIgnoreDisabledComponentBehavior.java
> >> >>>>>>
> ===================================================================
> >> >>>>>> ---
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/behavior/IIgnoreDisabledComponentBehavior.java
> >> >>>>>>      (revision
> >> >>>>>> 0)
> >> >>>>>> +++
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/behavior/IIgnoreDisabledComponentBehavior.java
> >> >>>>>>      (revision
> >> >>>>>> 0)
> >> >>>>>> @@ -0,0 +1,28 @@
> >> >>>>>> +/*
> >> >>>>>> + * Licensed to the Apache Software Foundation (ASF) under one or
> >> more
> >> >>>>>> + * contributor license agreements.  See the NOTICE file
> distributed
> >> with
> >> >>>>>> + * this work for additional information regarding copyright
> >> ownership.
> >> >>>>>> + * The ASF licenses this file to You under the Apache License,
> >> Version 2.0
> >> >>>>>> + * (the "License"); you may not use this file except in
> compliance
> >> with
> >> >>>>>> + * the License.  You may obtain a copy of the License at
> >> >>>>>> + *
> >> >>>>>> + *      http://www.apache.org/licenses/LICENSE-2.0
> >> >>>>>> + *
> >> >>>>>> + * Unless required by applicable law or agreed to in writing,
> >> software
> >> >>>>>> + * distributed under the License is distributed on an "AS IS"
> >> BASIS,
> >> >>>>>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
> or
> >> >>>>>> implied.
> >> >>>>>> + * See the License for the specific language governing
> permissions
> >> and
> >> >>>>>> + * limitations under the License.
> >> >>>>>> + */
> >> >>>>>> +package org.apache.wicket.behavior;
> >> >>>>>> +
> >> >>>>>> +/**
> >> >>>>>> + * Interface that can be used to tag behaviors where response
> >> should
> >> >>>>>> be called on even if the
> >> >>>>>> + * component is disabled.
> >> >>>>>> + *
> >> >>>>>> + * @author jcompagner
> >> >>>>>> + */
> >> >>>>>> +public interface IIgnoreDisabledComponentBehavior extends
> IBehavior
> >> >>>>>> +{
> >> >>>>>> +
> >> >>>>>> +}
> >> >>>>>> Index:
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/request/target/component/listener/BehaviorRequestTarget.java
> >> >>>>>>
> ===================================================================
> >> >>>>>> ---
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/request/target/component/listener/BehaviorRequestTarget.java
> >> >>>>>>        (revision
> >> >>>>>> 1033481)
> >> >>>>>> +++
> >> >>>>>>
> >>
> src/main/java/org/apache/wicket/request/target/component/listener/BehaviorRequestTarget.java
> >> >>>>>>        (working
> >> >>>>>> copy)
> >> >>>>>> @@ -18,13 +18,16 @@
> >> >>>>>>
> >> >>>>>>  import java.util.List;
> >> >>>>>>
> >> >>>>>> +import org.apache.wicket.AbortException;
> >> >>>>>>  import org.apache.wicket.Component;
> >> >>>>>>  import org.apache.wicket.Page;
> >> >>>>>>  import org.apache.wicket.RequestCycle;
> >> >>>>>>  import org.apache.wicket.RequestListenerInterface;
> >> >>>>>>  import org.apache.wicket.behavior.IBehavior;
> >> >>>>>>  import org.apache.wicket.behavior.IBehaviorListener;
> >> >>>>>> +import
> org.apache.wicket.behavior.IIgnoreDisabledComponentBehavior;
> >> >>>>>>  import org.apache.wicket.protocol.http.PageExpiredException;
> >> >>>>>> +import org.apache.wicket.protocol.http.WebRequest;
> >> >>>>>>  import org.apache.wicket.request.RequestParameters;
> >> >>>>>>  import org.slf4j.Logger;
> >> >>>>>>  import org.slf4j.LoggerFactory;
> >> >>>>>> @@ -85,13 +88,6 @@
> >> >>>>>>                // Get the IBehavior for the component based on
> the
> >> request
> >> >>>>>> parameters
> >> >>>>>>                final Component component = getTarget();
> >> >>>>>>
> >> >>>>>> -               if (!component.isVisibleInHierarchy() ||
> >> >>>>>> !component.isEnabledInHierarchy())
> >> >>>>>> -               {
> >> >>>>>> -                       // ignore this request
> >> >>>>>> -                       logger.warn("component not enabled or
> >> visible;
> >> >>>>>> ignoring call.
> >> >>>>>> Component: {}", component);
> >> >>>>>> -                       return;
> >> >>>>>> -               }
> >> >>>>>> -
> >> >>>>>>                final String id =
> >> getRequestParameters().getBehaviorId();
> >> >>>>>>                if (id == null)
> >> >>>>>>                {
> >> >>>>>> @@ -124,6 +120,11 @@
> >> >>>>>>                                        logger.warn(
> >> >>>>>>                                                "behavior not
> >> enabled;
> >> >>>>>> ignoring call. behavior: {} at index: {}
> >> >>>>>> on component: {}",
> >> >>>>>>                                                new Object[] {
> >> behavior,
> >> >>>>>> idAsInt, component });
> >> >>>>>> +                                       if
> >> (requestCycle.getRequest()
> >> >>>>>> instanceof WebRequest &&
> >> >>>>>> +
> >> >>>>>> ((WebRequest)requestCycle.getRequest()).isAjax())
> >> >>>>>> +                                       {
> >> >>>>>> +                                               throw new
> >> AbortException();
> >> >>>>>> +                                       }
> >> >>>>>>                                        return;
> >> >>>>>>                                }
> >> >>>>>>
> >> >>>>>> @@ -138,6 +139,20 @@
> >> >>>>>>                                "; Component: " +
> >> component.toString());
> >> >>>>>>                }
> >> >>>>>>
> >> >>>>>> +               if (!component.isVisibleInHierarchy() ||
> >> >>>>>> +                       (!(behaviorListener instanceof
> >> >>>>>> IIgnoreDisabledComponentBehavior)
> >> >>>>>> && !component.isEnabledInHierarchy()))
> >> >>>>>> +               {
> >> >>>>>> +                       // ignore this request
> >> >>>>>> +                       logger.warn("component not enabled or
> >> visible;
> >> >>>>>> ignoring call.
> >> >>>>>> Component: {}", component);
> >> >>>>>> +                       if (requestCycle.getRequest() instanceof
> >> WebRequest
> >> >>>>>> &&
> >> >>>>>> +
> >> >>>>>> ((WebRequest)requestCycle.getRequest()).isAjax())
> >> >>>>>> +                       {
> >> >>>>>> +                               throw new AbortException();
> >> >>>>>> +                       }
> >> >>>>>> +                       return;
> >> >>>>>> +               }
> >> >>>>>> +
> >> >>>>>> +
> >> >>>>>>                // Invoke the interface method
> >> >>>>>>                behaviorListener.onRequest();
> >> >>>>>>         }
> >> >>>>>>
> >> >>>>>>
> >> >>>>>>
> >> >>>>>> On Tue, Nov 23, 2010 at 09:42, Johan Compagner <
> >> jcompag...@gmail.com>
> >> >>>>>> wrote:
> >> >>>>>> > hi,
> >> >>>>>> >
> >> >>>>>> > i suddenly bump big time into this issue that is fixed.
> >> >>>>>> > ( https://issues.apache.org/jira/browse/WICKET-3098 )
> >> >>>>>> >
> >> >>>>>> > I get that disabled behaviors can't be used to do respond,
> because
> >> >>>>>> > that behavior shouldnt be rendered in the first place.
> >> >>>>>> >
> >> >>>>>> > But the fix also goes one step deeper... It also blocks if the
> >> >>>>>> > component is disabled.. That is a big problem
> >> >>>>>> >
> >> >>>>>> > Because a disabled component is rendered, and all the behaviors
> >> are
> >> >>>>>> > accepted and rendered also so now suddenly a behavior is
> rendered
> >> >>>>>> > (because the behavior is not disabled)
> >> >>>>>> > but a callback will fail...
> >> >>>>>> >
> >> >>>>>> > thats something i dont like...because now i get loads of these
> in
> >> the
> >> >>>>>> log:
> >> >>>>>> >
> >> >>>>>> > 2010-11-23 09:10:57,934 WARN [http-8080-1]
> >> >>>>>> >
> >>
> org.apache.wicket.request.target.component.listener.BehaviorRequestTarget
> >> >>>>>> > - component not enabled or visible; ignoring call. Component:
> >> >>>>>> > [MarkupContainer [Component id = View]]
> >> >>>>>> >
> >> >>>>>> >
> >> >>>>>> > and the worse thing is if the behavior blocks like that it fall
> >> backs
> >> >>>>>> > to a IRedirectListener so it rerenders the whole page and that
> >> again
> >> >>>>>> > renders the disabled component with its behavior and it starts
> all
> >> >>>>>> > over again and again and again.
> >> >>>>>> >
> >> >>>>>> > the example i have here is that we have a ListView/Repeater
> with
> >> some
> >> >>>>>> > paging component and that listview has a behavior attached that
> >> does a
> >> >>>>>> > call back when it got first rendered to give us back the sizes
> it
> >> has
> >> >>>>>> > in the browser
> >> >>>>>> > and if we see that it has way more space then it currently
> shows
> >> (if
> >> >>>>>> > it now shows 10 rows and it has space for 20) we rerender the
> >> ListView
> >> >>>>>> > again but then with a bigger visible row count.
> >> >>>>>> > that is a behavior of the ListView, but the listview can be in
> a
> >> >>>>>> > disabled state (because a user first have to press a button of
> >> "edit"
> >> >>>>>> > or something like that) but that resizing i still want to
> happen
> >> if if
> >> >>>>>> > the ListView is disabled...
> >> >>>>>> >
> >> >>>>>> > So i like to some how tell that that this behavior should be
> >> called.
> >> >>>>>> > Now we do this:
> >> >>>>>> >
> >> >>>>>> >
> >> >>>>>> > test component enablement
> >> >>>>>> > test behavior id
> >> >>>>>> > test behaviors
> >> >>>>>> > test behaviors enabledment.
> >> >>>>>> > call behavior
> >> >>>>>> >
> >> >>>>>> > i like to turn that around
> >> >>>>>> >
> >> >>>>>> > test behavior id
> >> >>>>>> > test behaviors
> >> >>>>>> > test behaviors enabledment.
> >> >>>>>> > test component enablement IF behavior doesnt implement
> >> >>>>>> IWorkForDisabledComponent
> >> >>>>>> > call behavior
> >> >>>>>> >
> >> >>>>>> > So that a developer can be explicit in that check..
> >> >>>>>> >
> >> >>>>>> > We could also introduce a public method on Component:
> >> >>>>>> > isEnabledFor(IBehavior) which returns defaults its own enable
> >> state.
> >> >>>>>> >
> >> >>>>>> > johan
> >> >>>>>> >
> >> >>>>>>
> >> >>>>>
> >> >>>>
> >> >>>
> >> >>
> >> >
> >>
> >
> >
> >
> > --
> > Pedro Henrique Oliveira dos Santos
> >
>



-- 
Pedro Henrique Oliveira dos Santos

Reply via email to