i added boolean canCallListenerInterface(Component component) to ibehavior -igor
On Wed, Nov 24, 2010 at 12:54 AM, Johan Compagner <[email protected]> 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 <[email protected]> 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 <[email protected]> >> 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 <[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 >>>>> > >>>>> >>>> >>> >> >
