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
>>> >
>>>
>>
>

Reply via email to