You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2009/02/01 01:09:59 UTC

[jira] Closed: (WICKET-1872) Url for behaviour and isTemporary flag of behaviour.

     [ https://issues.apache.org/jira/browse/WICKET-1872?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg closed WICKET-1872.
---------------------------------

    Resolution: Duplicate

> 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
>            Assignee: Igor Vaynberg
>            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.