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