IWontDoAnythingWhenTheComponentIsDisabledBehavior
IMASlackerBehavior

Martijn

On Wed, Nov 24, 2010 at 5: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
>>>>>>> >
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com

Reply via email to