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 <[email protected]> wrote:
> 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