Wicket
  1. Wicket
  2. WICKET-1872

Url for behaviour and isTemporary flag of behaviour.

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Duplicate
    • Affects Version/s: 1.3.4
    • Fix Version/s: None
    • Component/s: wicket
    • Labels:
      None

      Description

      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)

        Issue Links

          Activity

          Stanislav Dvorscak created issue -
          Igor Vaynberg made changes -
          Field Original Value New Value
          Priority Blocker [ 1 ] Critical [ 2 ]
          Igor Vaynberg made changes -
          Link This issue relates to WICKET-1483 [ WICKET-1483 ]
          Igor Vaynberg made changes -
          Assignee Igor Vaynberg [ ivaynberg ]
          Igor Vaynberg made changes -
          Link This issue duplicates WICKET-1483 [ WICKET-1483 ]
          Igor Vaynberg made changes -
          Link This issue relates to WICKET-1483 [ WICKET-1483 ]
          Igor Vaynberg made changes -
          Resolution Duplicate [ 3 ]
          Status Open [ 1 ] Closed [ 6 ]

            People

            • Assignee:
              Igor Vaynberg
              Reporter:
              Stanislav Dvorscak
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development