i dont think the behavior has been designed with the adding/removing
in mind. feel free to open a jira issue for it. i think a much easier
way to do this is to always add it and override isenabled()

-igor

On Mon, Jul 7, 2008 at 10:35 AM, Hoover, William <[EMAIL PROTECTED]> wrote:
> I am using a behavior that is dynamically added/removed from a TextField
> based upon another components state (in order to avoid extra round trips
> to the server):
>
> final AjaxFormComponentUpdatingBehavior afcub = ...
> final TextField textField = new TextField("some-id", new Model()){
>        protected final void onBeforeRender() {
>                boolean hasBehavior = false;
>                for (final IBehavior b : (List<IBehavior>)
> component.getBehaviors()) {
>                        if (b.equals(behavior)) {
>                                hasBehavior = true;
>                                break;
>                        }
>                }
>                // is add flag is captured by another components
> conditions to avoid server round-trips
>                if (isAddFlag && !hasBehavior) {
>                        add(afcub);
>                } else if(!isAddFlag && hasBehavior) {
>                        remove(afcub);
>                }
>                super.onBeforeRender();
>        }
> }
>
> Using the code above I get an IllegalStateException when the
> AjaxFormComponentUpdatingBehavior is added, then removed, and added
> again (all based on user interaction of course). In AbstractAjaxBehavoir
> there is a method that does a (component != null) check... shouldn't
> that check be (component != null && !(component.equals(hostComponent)))
> to avoid this type of scenario?
>
>        public final void bind(final Component hostComponent)
>        {
>                if (hostComponent == null)
>                {
>                        throw new IllegalArgumentException("Argument
> hostComponent must be not null");
>                }
>
>                if (component != null)
>                {
>                        throw new IllegalStateException("this kind of
> handler cannot be attached to " +
>                                "multiple components; it is already
> attached to component " + component +
>                                ", but component " + hostComponent + "
> wants to be attached too");
>
>                }
>
>                component = hostComponent;
>
>                // call the callback
>                onBind();
>        }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to