i added boolean canCallListenerInterface(Component component) to ibehavior

-igor

On Wed, Nov 24, 2010 at 12:54 AM, Johan Compagner <[email protected]> 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 <[email protected]> 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 <[email protected]> 
>> 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 <[email protected]> wrote:
>>>> On Tue, Nov 23, 2010 at 11:02 AM, Johan Compagner 
>>>> <[email protected]>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 <[email protected]>
>>>>> 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
>>>>> >
>>>>>
>>>>
>>>
>>
>

Reply via email to