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: Blocker
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.