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