ok then i check my changes in for 1.4 So that at least people that use 1.4 (like us) can use that one for now.
I can add a note in the doc that this will be replaced by 1.5 completely.. On Wed, Nov 24, 2010 at 17:15, Igor Vaynberg <igor.vaynb...@gmail.com> wrote: > i dont think the name of the mixin matters much because 1.5 is out > soonish. IListenerInterfaceTarget { canCallListenerInterface()} is not > so bad. > > -igor > > On Wed, Nov 24, 2010 at 8:12 AM, Johan Compagner <jcompag...@gmail.com> wrote: >> 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 <igor.vaynb...@gmail.com> wrote: >>> i added boolean canCallListenerInterface(Component component) to ibehavior >>> >>> -igor >>> >>> On Wed, Nov 24, 2010 at 12:54 AM, Johan Compagner <jcompag...@gmail.com> >>> 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 <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 >>>>>>>> > >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >