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