[
https://issues.apache.org/jira/browse/WICKET-1872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12642292#action_12642292
]
Igor Vaynberg commented on WICKET-1872:
---------------------------------------
doing it just for out of sync stuff is too complicated, i would rather have the
ibehavior[] arrray support nulls.
> Url for behaviour and isTemporary flag of behaviour.
> ----------------------------------------------------
>
> Key: WICKET-1872
> URL: https://issues.apache.org/jira/browse/WICKET-1872
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.3.4
> Reporter: Stanislav Dvorscak
> Priority: Critical
>
> You add two behaviors to the Component. First behavior is temporary and the
> second is normal.
> Now the wicket creates the url by "urlFor(final Component component, final
> IBehavior behaviour, final RequestListenerInterface listener)" for second
> behavior with behaviourId=1. On the end of request the wicket removes the
> temporary behavior. Now the component contains only 1 but not 2 behaviors.
> And in the next request in method "public final void processEvents(final
> RequestCycle requestCycle)" the wicket tries to find the behavior by its id.
> But the problem is with if (component.getBehaviors().size() > idAsInt)
> condition, and with the fact that index of behavior is incorrect.
> The problematic classes with their methods:
> *org.apache.wicket.RequestCycle:*
> public final CharSequence urlFor(final Component component, final
> IBehavior behaviour,
> final RequestListenerInterface listener)
> {
> int index = component.getBehaviors().indexOf(behaviour);
> if (index == -1)
> {
> throw new IllegalArgumentException("Behavior " + this +
> " was not registered with this component: " +
> component.toString());
> }
> RequestParameters params = new RequestParameters();
> params.setBehaviorId(String.valueOf(index));
> ...
> ==============================================================================================
> *org.apache.wicket.request.target.component.listener.BehaviorRequestTarget*
> public final void processEvents(final RequestCycle requestCycle)
> {
> // Preprocess like standard component request. Do all the
> initialization
> // necessary
> onProcessEvents(requestCycle);
> // Get the IBehavior for the component based on the request
> parameters
> final Component component = getTarget();
> final String id = getRequestParameters().getBehaviorId();
> if (id == null)
> {
> throw new IllegalStateException(
> "Parameter behaviorId was not provided:
> unable to locate listener. Component: " +
> component.toString());
> }
> final int idAsInt = Integer.parseInt(id);
> IBehaviorListener behaviorListener = null;
> if (component.getBehaviors().size() > idAsInt)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.