You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wicket.apache.org by Martin Grigorov <mg...@apache.org> on 2017/01/30 16:01:03 UTC

Re: wicket git commit: WICKET-6137 renamed ListenerInterfaceRequestHandler to ListenerRequestHandler

What
about org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler
?

Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Mon, Jan 30, 2017 at 4:51 PM, <sv...@apache.org> wrote:

> Repository: wicket
> Updated Branches:
>   refs/heads/master 16e44ce98 -> 8342e4ef9
>
>
> WICKET-6137 renamed ListenerInterfaceRequestHandler to
> ListenerRequestHandler
>
> there isn't a ..ListenerInterface any more
>
>
> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8342e4ef
> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8342e4ef
> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8342e4ef
>
> Branch: refs/heads/master
> Commit: 8342e4ef9acd442ddfe7ad78d04838d17c1b9fec
> Parents: 16e44ce
> Author: Sven Meier <sv...@apache.org>
> Authored: Mon Jan 30 16:50:26 2017 +0100
> Committer: Sven Meier <sv...@apache.org>
> Committed: Mon Jan 30 16:50:26 2017 +0100
>
> ----------------------------------------------------------------------
>  .../main/java/org/apache/wicket/Component.java  |   4 +-
>  ...markableListenerInterfaceRequestHandler.java |   2 +-
>  .../ListenerInterfaceRequestHandler.java        | 327 -------------------
>  .../request/handler/ListenerRequestHandler.java | 327 +++++++++++++++++++
>  .../logger/ListenerInterfaceLogData.java        | 214 ------------
>  .../request/handler/logger/ListenerLogData.java | 214 ++++++++++++
>  .../mapper/AbstractBookmarkableMapper.java      |   4 +-
>  .../core/request/mapper/MountedMapper.java      |   6 +-
>  .../core/request/mapper/PageInstanceMapper.java |   8 +-
>  .../wicket/util/tester/BaseWicketTester.java    |   6 +-
>  .../org/apache/wicket/BehaviorRequestTest.java  |   4 +-
>  .../ComponentWithLazyModelCreationTest.java     |   4 +-
>  .../ListenerInterfaceRequestHandlerTest.java    | 208 ------------
>  .../handler/ListenerRequestHandlerTest.java     | 208 ++++++++++++
>  .../request/mapper/BookmarkableMapperTest.java  |  18 +-
>  .../core/request/mapper/CryptoMapperTest.java   |  14 +-
>  .../core/request/mapper/MountedMapperTest.java  |  26 +-
>  .../core/request/mapper/PackageMapperTest.java  |  18 +-
>  .../request/mapper/PageInstanceMapperTest.java  |  16 +-
>  .../wicket/examples/ajax/prototype/Index.java   |   5 +-
>  20 files changed, 816 insertions(+), 817 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/Component.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java
> b/wicket-core/src/main/java/org/apache/wicket/Component.java
> index 97262ed..a6aa54f 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/Component.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
> @@ -32,7 +32,7 @@ import org.apache.wicket.authorization.
> UnauthorizedActionException;
>  import org.apache.wicket.authorization.strategies.page.
> SimplePageAuthorizationStrategy;
>  import org.apache.wicket.behavior.Behavior;
>  import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.util.lang.WicketObjects;
>  import org.apache.wicket.core.util.string.ComponentStrings;
> @@ -3396,7 +3396,7 @@ public abstract class Component
>                 }
>                 else
>                 {
> -                       return new ListenerInterfaceRequestHandler(provider,
> id);
> +                       return new ListenerRequestHandler(provider, id);
>                 }
>         }
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> BookmarkableListenerInterfaceRequestHandler.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/BookmarkableListenerInterfaceRequestHandler.java
> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> BookmarkableListenerInterfaceRequestHandler.java
> index b3de191..772e215 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> BookmarkableListenerInterfaceRequestHandler.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> BookmarkableListenerInterfaceRequestHandler.java
> @@ -25,7 +25,7 @@ import org.apache.wicket.util.lang.Args;
>
>  /**
>   * Request handler for bookmarkable pages with an {@link
> IRequestListener}. This handler is only used to
> - * generate URLs. Rendering is always handled by {@link
> ListenerInterfaceRequestHandler}.
> + * generate URLs. Rendering is always handled by {@link
> ListenerRequestHandler}.
>   *
>   * @author Matej Knopp
>   */
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandler.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/ListenerInterfaceRequestHandler.java
> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandler.java
> deleted file mode 100644
> index c976a42..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandler.java
> +++ /dev/null
> @@ -1,327 +0,0 @@
> -/*
> - * Licensed to the Apache Software Foundation (ASF) under one or more
> - * contributor license agreements.  See the NOTICE file distributed with
> - * this work for additional information regarding copyright ownership.
> - * The ASF licenses this file to You under the Apache License, Version 2.0
> - * (the "License"); you may not use this file except in compliance with
> - * the License.  You may obtain a copy of the License at
> - *
> - *      http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - */
> -package org.apache.wicket.core.request.handler;
> -
> -import org.apache.wicket.Component;
> -import org.apache.wicket.IRequestListener;
> -import org.apache.wicket.Page;
> -import org.apache.wicket.WicketRuntimeException;
> -import org.apache.wicket.behavior.Behavior;
> -import org.apache.wicket.core.request.handler.RenderPageRequestHandler.
> RedirectPolicy;
> -import org.apache.wicket.core.request.handler.logger.
> ListenerInterfaceLogData;
> -import org.apache.wicket.request.ILoggableRequestHandler;
> -import org.apache.wicket.request.IRequestCycle;
> -import org.apache.wicket.request.component.IRequestableComponent;
> -import org.apache.wicket.request.component.IRequestablePage;
> -import org.apache.wicket.request.http.WebRequest;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
> -import org.apache.wicket.util.lang.Args;
> -import org.slf4j.Logger;
> -import org.slf4j.LoggerFactory;
> -
> -/**
> - * Request handler that invokes an {@link IRequestListener} on component
> or behavior and renders page afterwards.
> - *
> - * @author Matej Knopp
> - */
> -public class ListenerInterfaceRequestHandler
> -       implements
> -               IPageRequestHandler,
> -               IComponentRequestHandler,
> -               ILoggableRequestHandler
> -{
> -
> -       private static final Logger LOG = LoggerFactory.getLogger(
> ListenerInterfaceRequestHandler.class);
> -
> -       private final IPageAndComponentProvider pageComponentProvider;
> -
> -       private final Integer behaviorId;
> -
> -       private ListenerInterfaceLogData logData;
> -
> -       /**
> -        * Construct.
> -        *
> -        * @param pageComponentProvider
> -        * @param behaviorIndex
> -        */
> -       public ListenerInterfaceRequestHandler(IPageAndComponentProvider
> pageComponentProvider, Integer behaviorIndex)
> -       {
> -               Args.notNull(pageComponentProvider,
> "pageComponentProvider");
> -
> -               this.pageComponentProvider = pageComponentProvider;
> -               behaviorId = behaviorIndex;
> -       }
> -
> -       /**
> -        * Construct.
> -        *
> -        * @param pageComponentProvider
> -        */
> -       public ListenerInterfaceRequestHandler(PageAndComponentProvider
> pageComponentProvider)
> -       {
> -               this(pageComponentProvider, null);
> -       }
> -
> -       public boolean includeRenderCount() {
> -               if (behaviorId == null) {
> -                       return ((IRequestListener)
> getComponent()).rendersPage();
> -               } else {
> -                       return ((IRequestListener)getComponent().
> getBehaviorById(getBehaviorIndex())).rendersPage();
> -               }
> -       }
> -
> -       @Override
> -       public IRequestableComponent getComponent()
> -       {
> -               return pageComponentProvider.getComponent();
> -       }
> -
> -       @Override
> -       public IRequestablePage getPage()
> -       {
> -               return pageComponentProvider.getPageInstance();
> -       }
> -
> -       @Override
> -       public Class<? extends IRequestablePage> getPageClass()
> -       {
> -               return pageComponentProvider.getPageClass();
> -       }
> -
> -       @Override
> -       public Integer getPageId()
> -       {
> -               return pageComponentProvider.getPageId();
> -       }
> -
> -       @Override
> -       public PageParameters getPageParameters()
> -       {
> -               return pageComponentProvider.getPageParameters();
> -       }
> -
> -       @Override
> -       public void detach(IRequestCycle requestCycle)
> -       {
> -               if (logData == null)
> -               {
> -                       logData = new ListenerInterfaceLogData(pageComponentProvider,
> behaviorId);
> -               }
> -               pageComponentProvider.detach();
> -       }
> -
> -       /**
> -        * Index of target behavior or <code>null</code> if component is
> the target.
> -        *
> -        * @return behavior index or <code>null</code>
> -        */
> -       public Integer getBehaviorIndex()
> -       {
> -               return behaviorId;
> -       }
> -
> -       @Override
> -       public void respond(final IRequestCycle requestCycle)
> -       {
> -               final IRequestablePage page = getPage();
> -               final boolean freshPage = pageComponentProvider.
> isPageInstanceFresh();
> -               final boolean isAjax = ((WebRequest)requestCycle.
> getRequest()).isAjax();
> -
> -               IRequestableComponent component;
> -               try
> -               {
> -                       component = getComponent();
> -               }
> -               catch (ComponentNotFoundException e)
> -               {
> -                       // either the page is stateless and the component
> we are looking for is not added in the
> -                       // constructor
> -                       // or the page is stateful+stale and a new
> instances was created by pageprovider
> -                       // we denote this by setting component to null
> -                       component = null;
> -               }
> -
> -               if ((component == null && !freshPage) || (component !=
> null && component.getPage() != page))
> -               {
> -                       throw new ComponentNotFoundException("Component
> '" + getComponentPath()
> -                                       + "' has been removed from page.");
> -               }
> -
> -               if (page instanceof Page)
> -               {
> -                       // initialize the page to be able to check whether
> it is stateless
> -                       ((Page)page).internalInitialize();
> -               }
> -
> -               RedirectPolicy policy = page.isPageStateless()
> -                       ? RedirectPolicy.NEVER_REDIRECT
> -                       : RedirectPolicy.AUTO_REDIRECT;
> -
> -               boolean blockIfExpired = component != null && !component.
> canCallListenerInterfaceAfterExpiry();
> -
> -               boolean lateComponent = component == null && freshPage;
> -
> -               if ((pageComponentProvider.wasExpired() &&
> blockIfExpired) || lateComponent)
> -               {
> -                       // A request listener is invoked on an expired
> page or the component couldn't be
> -                       // determined. The best we can do is to re-paint
> the newly constructed page.
> -                       // Reference: WICKET-4454, WICKET-6288
> -
> -                       if (LOG.isDebugEnabled())
> -                       {
> -                               LOG.debug(
> -                                       "An IRequestListener was called
> but its page/component({}) couldn't be resolved. "
> -                                               + "Scheduling re-create of
> the page and ignoring the listener interface...",
> -                                       getComponentPath());
> -                       }
> -
> -                       if (isAjax)
> -                       {
> -                               policy = RedirectPolicy.ALWAYS_REDIRECT;
> -                       }
> -
> -                       requestCycle.scheduleRequestHandlerAfterCurrent(new
> RenderPageRequestHandler(
> -                               new PageProvider(page), policy));
> -                       return;
> -               }
> -
> -               invokeListener(requestCycle, policy, isAjax);
> -       }
> -
> -       private void invokeListener(IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax)
> -       {
> -               if (getBehaviorIndex() == null)
> -               {
> -                       invoke(requestCycle, policy, ajax, getComponent());
> -               }
> -               else
> -               {
> -                       try
> -                       {
> -                               Behavior behavior = getComponent().
> getBehaviorById(behaviorId);
> -                               invoke(requestCycle, policy, ajax,
> getComponent(), behavior);
> -                       }
> -                       catch (IndexOutOfBoundsException e)
> -                       {
> -                               throw new WicketRuntimeException("Couldn't
> find component behavior.", e);
> -                       }
> -
> -               }
> -       }
> -
> -       /**
> -        * Invokes a given interface on a component.
> -        *
> -        * @param rcomponent
> -        *            The component
> -        *
> -        * @throws ListenerInvocationNotAllowedException
> -        *             when listener invocation attempted on a component
> that does not allow it
> -        */
> -       private final void invoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final IRequestableComponent rcomponent)
> -       {
> -               // we are in Wicket core land
> -               final Component component = (Component)rcomponent;
> -
> -               if (!component.canCallListenerInterface())
> -               {
> -                       // just return so that we have a silent fail and
> just re-render the
> -                       // page
> -                       LOG.info("component not enabled or visible;
> ignoring call. Component: " + component);
> -                       throw new ListenerInvocationNotAllowedException(component,
> null,
> -                               "Component rejected interface invocation");
> -               }
> -
> -               internalInvoke(requestCycle, policy, ajax, component,
> component);
> -       }
> -
> -       /**
> -        * Invokes a given interface on a component's behavior.
> -        *
> -        * @param rcomponent
> -        *            The component
> -        * @param behavior
> -        * @throws ListenerInvocationNotAllowedException
> -        *             when listener invocation attempted on a component
> that does not allow it
> -        */
> -       private final void invoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final IRequestableComponent
> rcomponent, final Behavior behavior)
> -       {
> -               // we are in Wicket core land
> -               final Component component = (Component)rcomponent;
> -
> -               if (!behavior.canCallListenerInterface(component))
> -               {
> -                       LOG.warn("behavior not enabled; ignore call.
> Behavior {} at component {}", behavior,
> -                               component);
> -                       throw new ListenerInvocationNotAllowedException(component,
> behavior,
> -                               "Behavior rejected interface invocation.
> ");
> -               }
> -
> -               internalInvoke(requestCycle, policy, ajax, component,
> behavior);
> -       }
> -
> -       private void internalInvoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final Component component, final
> Object target)
> -       {
> -               // save a reference to the page because the component can
> be removed
> -               // during the invocation of the listener and thus lose its
> parent
> -               Page page = component.getPage();
> -
> -               // initialization is required for stateless pages
> -               if (!page.isInitialized())
> -               {
> -                       page.internalInitialize();
> -               }
> -
> -               IRequestListener requestListener =
> (IRequestListener)target;
> -
> -               if (requestListener.rendersPage() && !ajax)
> -               {
> -                       // schedule page render after current request
> handler is done. this can be
> -                       // overridden during invocation of listener
> -                       // method (i.e. by calling
> RequestCycle#setResponsePage)
> -                       requestCycle.scheduleRequestHandlerAfterCurrent(new
> RenderPageRequestHandler(
> -                               new PageProvider(page), policy));
> -               }
> -
> -               requestListener.onRequest();
> -       }
> -
> -       @Override
> -       public final boolean isPageInstanceCreated()
> -       {
> -               return pageComponentProvider.hasPageInstance();
> -       }
> -
> -       @Override
> -       public final String getComponentPath()
> -       {
> -               return pageComponentProvider.getComponentPath();
> -       }
> -
> -       @Override
> -       public final Integer getRenderCount()
> -       {
> -               return pageComponentProvider.getRenderCount();
> -       }
> -
> -       @Override
> -       public ListenerInterfaceLogData getLogData()
> -       {
> -               return logData;
> -       }
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> ListenerRequestHandler.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/ListenerRequestHandler.java b/wicket-core/src/main/java/
> org/apache/wicket/core/request/handler/ListenerRequestHandler.java
> new file mode 100644
> index 0000000..3f131e3
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
> ListenerRequestHandler.java
> @@ -0,0 +1,327 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.wicket.core.request.handler;
> +
> +import org.apache.wicket.Component;
> +import org.apache.wicket.IRequestListener;
> +import org.apache.wicket.Page;
> +import org.apache.wicket.WicketRuntimeException;
> +import org.apache.wicket.behavior.Behavior;
> +import org.apache.wicket.core.request.handler.RenderPageRequestHandler.
> RedirectPolicy;
> +import org.apache.wicket.core.request.handler.logger.ListenerLogData;
> +import org.apache.wicket.request.ILoggableRequestHandler;
> +import org.apache.wicket.request.IRequestCycle;
> +import org.apache.wicket.request.component.IRequestableComponent;
> +import org.apache.wicket.request.component.IRequestablePage;
> +import org.apache.wicket.request.http.WebRequest;
> +import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.util.lang.Args;
> +import org.slf4j.Logger;
> +import org.slf4j.LoggerFactory;
> +
> +/**
> + * Request handler that invokes an {@link IRequestListener} on component
> or behavior and renders page afterwards.
> + *
> + * @author Matej Knopp
> + */
> +public class ListenerRequestHandler
> +       implements
> +               IPageRequestHandler,
> +               IComponentRequestHandler,
> +               ILoggableRequestHandler
> +{
> +
> +       private static final Logger LOG = LoggerFactory.getLogger(
> ListenerRequestHandler.class);
> +
> +       private final IPageAndComponentProvider pageComponentProvider;
> +
> +       private final Integer behaviorId;
> +
> +       private ListenerLogData logData;
> +
> +       /**
> +        * Construct.
> +        *
> +        * @param pageComponentProvider
> +        * @param behaviorIndex
> +        */
> +       public ListenerRequestHandler(IPageAndComponentProvider
> pageComponentProvider, Integer behaviorIndex)
> +       {
> +               Args.notNull(pageComponentProvider,
> "pageComponentProvider");
> +
> +               this.pageComponentProvider = pageComponentProvider;
> +               behaviorId = behaviorIndex;
> +       }
> +
> +       /**
> +        * Construct.
> +        *
> +        * @param pageComponentProvider
> +        */
> +       public ListenerRequestHandler(PageAndComponentProvider
> pageComponentProvider)
> +       {
> +               this(pageComponentProvider, null);
> +       }
> +
> +       public boolean includeRenderCount() {
> +               if (behaviorId == null) {
> +                       return ((IRequestListener)
> getComponent()).rendersPage();
> +               } else {
> +                       return ((IRequestListener)getComponent().
> getBehaviorById(getBehaviorIndex())).rendersPage();
> +               }
> +       }
> +
> +       @Override
> +       public IRequestableComponent getComponent()
> +       {
> +               return pageComponentProvider.getComponent();
> +       }
> +
> +       @Override
> +       public IRequestablePage getPage()
> +       {
> +               return pageComponentProvider.getPageInstance();
> +       }
> +
> +       @Override
> +       public Class<? extends IRequestablePage> getPageClass()
> +       {
> +               return pageComponentProvider.getPageClass();
> +       }
> +
> +       @Override
> +       public Integer getPageId()
> +       {
> +               return pageComponentProvider.getPageId();
> +       }
> +
> +       @Override
> +       public PageParameters getPageParameters()
> +       {
> +               return pageComponentProvider.getPageParameters();
> +       }
> +
> +       @Override
> +       public void detach(IRequestCycle requestCycle)
> +       {
> +               if (logData == null)
> +               {
> +                       logData = new ListenerLogData(pageComponentProvider,
> behaviorId);
> +               }
> +               pageComponentProvider.detach();
> +       }
> +
> +       /**
> +        * Index of target behavior or <code>null</code> if component is
> the target.
> +        *
> +        * @return behavior index or <code>null</code>
> +        */
> +       public Integer getBehaviorIndex()
> +       {
> +               return behaviorId;
> +       }
> +
> +       @Override
> +       public void respond(final IRequestCycle requestCycle)
> +       {
> +               final IRequestablePage page = getPage();
> +               final boolean freshPage = pageComponentProvider.
> isPageInstanceFresh();
> +               final boolean isAjax = ((WebRequest)requestCycle.
> getRequest()).isAjax();
> +
> +               IRequestableComponent component;
> +               try
> +               {
> +                       component = getComponent();
> +               }
> +               catch (ComponentNotFoundException e)
> +               {
> +                       // either the page is stateless and the component
> we are looking for is not added in the
> +                       // constructor
> +                       // or the page is stateful+stale and a new
> instances was created by pageprovider
> +                       // we denote this by setting component to null
> +                       component = null;
> +               }
> +
> +               if ((component == null && !freshPage) || (component !=
> null && component.getPage() != page))
> +               {
> +                       throw new ComponentNotFoundException("Component
> '" + getComponentPath()
> +                                       + "' has been removed from page.");
> +               }
> +
> +               if (page instanceof Page)
> +               {
> +                       // initialize the page to be able to check whether
> it is stateless
> +                       ((Page)page).internalInitialize();
> +               }
> +
> +               RedirectPolicy policy = page.isPageStateless()
> +                       ? RedirectPolicy.NEVER_REDIRECT
> +                       : RedirectPolicy.AUTO_REDIRECT;
> +
> +               boolean blockIfExpired = component != null && !component.
> canCallListenerInterfaceAfterExpiry();
> +
> +               boolean lateComponent = component == null && freshPage;
> +
> +               if ((pageComponentProvider.wasExpired() &&
> blockIfExpired) || lateComponent)
> +               {
> +                       // A request listener is invoked on an expired
> page or the component couldn't be
> +                       // determined. The best we can do is to re-paint
> the newly constructed page.
> +                       // Reference: WICKET-4454, WICKET-6288
> +
> +                       if (LOG.isDebugEnabled())
> +                       {
> +                               LOG.debug(
> +                                       "An IRequestListener was called
> but its page/component({}) couldn't be resolved. "
> +                                               + "Scheduling re-create of
> the page and ignoring the listener interface...",
> +                                       getComponentPath());
> +                       }
> +
> +                       if (isAjax)
> +                       {
> +                               policy = RedirectPolicy.ALWAYS_REDIRECT;
> +                       }
> +
> +                       requestCycle.scheduleRequestHandlerAfterCurrent(new
> RenderPageRequestHandler(
> +                               new PageProvider(page), policy));
> +                       return;
> +               }
> +
> +               invokeListener(requestCycle, policy, isAjax);
> +       }
> +
> +       private void invokeListener(IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax)
> +       {
> +               if (getBehaviorIndex() == null)
> +               {
> +                       invoke(requestCycle, policy, ajax, getComponent());
> +               }
> +               else
> +               {
> +                       try
> +                       {
> +                               Behavior behavior = getComponent().
> getBehaviorById(behaviorId);
> +                               invoke(requestCycle, policy, ajax,
> getComponent(), behavior);
> +                       }
> +                       catch (IndexOutOfBoundsException e)
> +                       {
> +                               throw new WicketRuntimeException("Couldn't
> find component behavior.", e);
> +                       }
> +
> +               }
> +       }
> +
> +       /**
> +        * Invokes a given interface on a component.
> +        *
> +        * @param rcomponent
> +        *            The component
> +        *
> +        * @throws ListenerInvocationNotAllowedException
> +        *             when listener invocation attempted on a component
> that does not allow it
> +        */
> +       private final void invoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final IRequestableComponent rcomponent)
> +       {
> +               // we are in Wicket core land
> +               final Component component = (Component)rcomponent;
> +
> +               if (!component.canCallListenerInterface())
> +               {
> +                       // just return so that we have a silent fail and
> just re-render the
> +                       // page
> +                       LOG.info("component not enabled or visible;
> ignoring call. Component: " + component);
> +                       throw new ListenerInvocationNotAllowedException(component,
> null,
> +                               "Component rejected interface invocation");
> +               }
> +
> +               internalInvoke(requestCycle, policy, ajax, component,
> component);
> +       }
> +
> +       /**
> +        * Invokes a given interface on a component's behavior.
> +        *
> +        * @param rcomponent
> +        *            The component
> +        * @param behavior
> +        * @throws ListenerInvocationNotAllowedException
> +        *             when listener invocation attempted on a component
> that does not allow it
> +        */
> +       private final void invoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final IRequestableComponent
> rcomponent, final Behavior behavior)
> +       {
> +               // we are in Wicket core land
> +               final Component component = (Component)rcomponent;
> +
> +               if (!behavior.canCallListenerInterface(component))
> +               {
> +                       LOG.warn("behavior not enabled; ignore call.
> Behavior {} at component {}", behavior,
> +                               component);
> +                       throw new ListenerInvocationNotAllowedException(component,
> behavior,
> +                               "Behavior rejected interface invocation.
> ");
> +               }
> +
> +               internalInvoke(requestCycle, policy, ajax, component,
> behavior);
> +       }
> +
> +       private void internalInvoke(final IRequestCycle requestCycle,
> RedirectPolicy policy, boolean ajax, final Component component, final
> Object target)
> +       {
> +               // save a reference to the page because the component can
> be removed
> +               // during the invocation of the listener and thus lose its
> parent
> +               Page page = component.getPage();
> +
> +               // initialization is required for stateless pages
> +               if (!page.isInitialized())
> +               {
> +                       page.internalInitialize();
> +               }
> +
> +               IRequestListener requestListener =
> (IRequestListener)target;
> +
> +               if (requestListener.rendersPage() && !ajax)
> +               {
> +                       // schedule page render after current request
> handler is done. this can be
> +                       // overridden during invocation of listener
> +                       // method (i.e. by calling
> RequestCycle#setResponsePage)
> +                       requestCycle.scheduleRequestHandlerAfterCurrent(new
> RenderPageRequestHandler(
> +                               new PageProvider(page), policy));
> +               }
> +
> +               requestListener.onRequest();
> +       }
> +
> +       @Override
> +       public final boolean isPageInstanceCreated()
> +       {
> +               return pageComponentProvider.hasPageInstance();
> +       }
> +
> +       @Override
> +       public final String getComponentPath()
> +       {
> +               return pageComponentProvider.getComponentPath();
> +       }
> +
> +       @Override
> +       public final Integer getRenderCount()
> +       {
> +               return pageComponentProvider.getRenderCount();
> +       }
> +
> +       @Override
> +       public ListenerLogData getLogData()
> +       {
> +               return logData;
> +       }
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerInterfaceLogData.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerInterfaceLogData.java
> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/
> ListenerInterfaceLogData.java
> deleted file mode 100644
> index 5ed97a7..0000000
> --- a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerInterfaceLogData.java
> +++ /dev/null
> @@ -1,214 +0,0 @@
> -/*
> - * Licensed to the Apache Software Foundation (ASF) under one or more
> - * contributor license agreements.  See the NOTICE file distributed with
> - * this work for additional information regarding copyright ownership.
> - * The ASF licenses this file to You under the Apache License, Version 2.0
> - * (the "License"); you may not use this file except in compliance with
> - * the License.  You may obtain a copy of the License at
> - *
> - *      http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - */
> -package org.apache.wicket.core.request.handler.logger;
> -
> -import org.apache.wicket.Component;
> -import org.apache.wicket.behavior.Behavior;
> -import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
> -import org.apache.wicket.markup.html.form.Form;
> -import org.apache.wicket.markup.html.form.IFormSubmitter;
> -import org.apache.wicket.request.component.IRequestableComponent;
> -
> -/**
> - * Contains logging data for component/listener-interface request
> handlers.
> - *
> - * @author Emond Papegaaij
> - */
> -public class ListenerInterfaceLogData extends PageLogData
> -{
> -       private static final long serialVersionUID = 1L;
> -
> -       private final Class<? extends IRequestableComponent>
> componentClass;
> -       private final String componentPath;
> -       private final Integer behaviorIndex;
> -       private Class<? extends Behavior> behaviorClass;
> -       private Class<? extends IRequestableComponent>
> submittingComponentClass;
> -       private String submittingComponentPath;
> -
> -       /**
> -        * Construct.
> -        *
> -        * @param pageAndComponentProvider
> -        * @param listenerInterface
> -        * @param behaviorIndex
> -        */
> -       public ListenerInterfaceLogData(IPageAndComponentProvider
> pageAndComponentProvider, Integer behaviorIndex)
> -       {
> -               super(pageAndComponentProvider);
> -               componentClass = tryToGetComponentClass(
> pageAndComponentProvider);
> -               componentPath = tryToGetComponentPath(
> pageAndComponentProvider);
> -               this.behaviorIndex = behaviorIndex;
> -               if (behaviorIndex != null && componentClass != null)
> -               {
> -                       try
> -                       {
> -                               behaviorClass = pageAndComponentProvider.
> getComponent()
> -                                       .getBehaviorById(behaviorIndex)
> -                                       .getClass();
> -                       }
> -                       catch (Exception ignore)
> -                       {
> -                               behaviorClass = null;
> -                       }
> -               }
> -               else
> -               {
> -                       behaviorClass = null;
> -               }
> -
> -               final Component formSubmitter =
> tryToGetFormSubmittingComponent(pageAndComponentProvider);
> -               if (formSubmitter != null)
> -               {
> -                       submittingComponentClass =
> formSubmitter.getClass();
> -                       submittingComponentPath = formSubmitter.
> getPageRelativePath();
> -               }
> -       }
> -
> -       private static Class<? extends IRequestableComponent>
> tryToGetComponentClass(
> -               IPageAndComponentProvider pageAndComponentProvider)
> -       {
> -               try
> -               {
> -                       return pageAndComponentProvider.
> getComponent().getClass();
> -               }
> -               catch (Exception e)
> -               {
> -                       // getComponent might fail if the page does not
> exist (ie session timeout)
> -                       return null;
> -               }
> -       }
> -
> -
> -       private static String tryToGetComponentPath(IPageAndComponentProvider
> pageAndComponentProvider)
> -       {
> -               try
> -               {
> -                       return pageAndComponentProvider.
> getComponentPath();
> -               }
> -               catch (Exception e)
> -               {
> -                       // getComponentPath might fail if the page does
> not exist (ie session timeout)
> -                       return null;
> -               }
> -       }
> -
> -       private static Component tryToGetFormSubmittingComponent(
> -               IPageAndComponentProvider pageAndComponentProvider)
> -       {
> -               try
> -               {
> -                       final IRequestableComponent component =
> pageAndComponentProvider.getComponent();
> -                       if (component instanceof Form)
> -                       {
> -                               final IFormSubmitter submitter =
> ((Form<?>)component).findSubmittingButton();
> -                               return submitter instanceof Component ?
> (Component)submitter : null;
> -                       }
> -                       return null;
> -               }
> -               catch (Exception e)
> -               {
> -                       // getComponent might fail if the page does not
> exist (ie session timeout)
> -                       return null;
> -               }
> -       }
> -
> -       /**
> -        * @return componentClass
> -        */
> -       public final Class<? extends IRequestableComponent>
> getComponentClass()
> -       {
> -               return componentClass;
> -       }
> -
> -       /**
> -        * @return componentPath
> -        */
> -       public final String getComponentPath()
> -       {
> -               return componentPath;
> -       }
> -
> -       /**
> -        * @return behaviorIndex
> -        */
> -       public final Integer getBehaviorIndex()
> -       {
> -               return behaviorIndex;
> -       }
> -
> -       /**
> -        * @return behaviorClass
> -        */
> -       public final Class<? extends Behavior> getBehaviorClass()
> -       {
> -               return behaviorClass;
> -       }
> -
> -       /**
> -        * @return submittingComponentClass
> -        */
> -       public Class<? extends IRequestableComponent>
> getSubmittingComponentClass()
> -       {
> -               return submittingComponentClass;
> -       }
> -
> -       /**
> -        * @return submittingComponentPath
> -        */
> -       public String getSubmittingComponentPath()
> -       {
> -               return submittingComponentPath;
> -       }
> -
> -       @Override
> -       public String toString()
> -       {
> -               StringBuilder sb = new StringBuilder(super.toString());
> -               sb.setCharAt(sb.length() - 1, ',');
> -               if (getComponentClass() != null)
> -               {
> -                       sb.append("componentClass=");
> -                       sb.append(getComponentClass().getName());
> -                       sb.append(',');
> -               }
> -               if (getComponentPath() != null)
> -               {
> -                       sb.append("componentPath=");
> -                       sb.append(getComponentPath());
> -                       sb.append(',');
> -               }
> -               sb.append("behaviorIndex=");
> -               sb.append(getBehaviorIndex());
> -               if (getBehaviorClass() != null)
> -               {
> -                       sb.append(",behaviorClass=");
> -                       sb.append(getBehaviorClass().getName());
> -               }
> -               if (getSubmittingComponentClass() != null)
> -               {
> -                       sb.append(",submittingComponentClass=");
> -                       sb.append(getSubmittingComponentClass().
> getName());
> -               }
> -               if (getSubmittingComponentPath() != null)
> -               {
> -                       sb.append(",submittingComponentPath=");
> -                       sb.append(getSubmittingComponentPath());
> -               }
> -               sb.append("}");
> -               return sb.toString();
> -       }
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerLogData.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerLogData.java b/wicket-core/src/main/java/
> org/apache/wicket/core/request/handler/logger/ListenerLogData.java
> new file mode 100644
> index 0000000..d06fe69
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/
> request/handler/logger/ListenerLogData.java
> @@ -0,0 +1,214 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.wicket.core.request.handler.logger;
> +
> +import org.apache.wicket.Component;
> +import org.apache.wicket.behavior.Behavior;
> +import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
> +import org.apache.wicket.markup.html.form.Form;
> +import org.apache.wicket.markup.html.form.IFormSubmitter;
> +import org.apache.wicket.request.component.IRequestableComponent;
> +
> +/**
> + * Contains logging data for component/listener-interface request
> handlers.
> + *
> + * @author Emond Papegaaij
> + */
> +public class ListenerLogData extends PageLogData
> +{
> +       private static final long serialVersionUID = 1L;
> +
> +       private final Class<? extends IRequestableComponent>
> componentClass;
> +       private final String componentPath;
> +       private final Integer behaviorIndex;
> +       private Class<? extends Behavior> behaviorClass;
> +       private Class<? extends IRequestableComponent>
> submittingComponentClass;
> +       private String submittingComponentPath;
> +
> +       /**
> +        * Construct.
> +        *
> +        * @param pageAndComponentProvider
> +        * @param listenerInterface
> +        * @param behaviorIndex
> +        */
> +       public ListenerLogData(IPageAndComponentProvider
> pageAndComponentProvider, Integer behaviorIndex)
> +       {
> +               super(pageAndComponentProvider);
> +               componentClass = tryToGetComponentClass(
> pageAndComponentProvider);
> +               componentPath = tryToGetComponentPath(
> pageAndComponentProvider);
> +               this.behaviorIndex = behaviorIndex;
> +               if (behaviorIndex != null && componentClass != null)
> +               {
> +                       try
> +                       {
> +                               behaviorClass = pageAndComponentProvider.
> getComponent()
> +                                       .getBehaviorById(behaviorIndex)
> +                                       .getClass();
> +                       }
> +                       catch (Exception ignore)
> +                       {
> +                               behaviorClass = null;
> +                       }
> +               }
> +               else
> +               {
> +                       behaviorClass = null;
> +               }
> +
> +               final Component formSubmitter =
> tryToGetFormSubmittingComponent(pageAndComponentProvider);
> +               if (formSubmitter != null)
> +               {
> +                       submittingComponentClass =
> formSubmitter.getClass();
> +                       submittingComponentPath = formSubmitter.
> getPageRelativePath();
> +               }
> +       }
> +
> +       private static Class<? extends IRequestableComponent>
> tryToGetComponentClass(
> +               IPageAndComponentProvider pageAndComponentProvider)
> +       {
> +               try
> +               {
> +                       return pageAndComponentProvider.
> getComponent().getClass();
> +               }
> +               catch (Exception e)
> +               {
> +                       // getComponent might fail if the page does not
> exist (ie session timeout)
> +                       return null;
> +               }
> +       }
> +
> +
> +       private static String tryToGetComponentPath(IPageAndComponentProvider
> pageAndComponentProvider)
> +       {
> +               try
> +               {
> +                       return pageAndComponentProvider.
> getComponentPath();
> +               }
> +               catch (Exception e)
> +               {
> +                       // getComponentPath might fail if the page does
> not exist (ie session timeout)
> +                       return null;
> +               }
> +       }
> +
> +       private static Component tryToGetFormSubmittingComponent(
> +               IPageAndComponentProvider pageAndComponentProvider)
> +       {
> +               try
> +               {
> +                       final IRequestableComponent component =
> pageAndComponentProvider.getComponent();
> +                       if (component instanceof Form)
> +                       {
> +                               final IFormSubmitter submitter =
> ((Form<?>)component).findSubmittingButton();
> +                               return submitter instanceof Component ?
> (Component)submitter : null;
> +                       }
> +                       return null;
> +               }
> +               catch (Exception e)
> +               {
> +                       // getComponent might fail if the page does not
> exist (ie session timeout)
> +                       return null;
> +               }
> +       }
> +
> +       /**
> +        * @return componentClass
> +        */
> +       public final Class<? extends IRequestableComponent>
> getComponentClass()
> +       {
> +               return componentClass;
> +       }
> +
> +       /**
> +        * @return componentPath
> +        */
> +       public final String getComponentPath()
> +       {
> +               return componentPath;
> +       }
> +
> +       /**
> +        * @return behaviorIndex
> +        */
> +       public final Integer getBehaviorIndex()
> +       {
> +               return behaviorIndex;
> +       }
> +
> +       /**
> +        * @return behaviorClass
> +        */
> +       public final Class<? extends Behavior> getBehaviorClass()
> +       {
> +               return behaviorClass;
> +       }
> +
> +       /**
> +        * @return submittingComponentClass
> +        */
> +       public Class<? extends IRequestableComponent>
> getSubmittingComponentClass()
> +       {
> +               return submittingComponentClass;
> +       }
> +
> +       /**
> +        * @return submittingComponentPath
> +        */
> +       public String getSubmittingComponentPath()
> +       {
> +               return submittingComponentPath;
> +       }
> +
> +       @Override
> +       public String toString()
> +       {
> +               StringBuilder sb = new StringBuilder(super.toString());
> +               sb.setCharAt(sb.length() - 1, ',');
> +               if (getComponentClass() != null)
> +               {
> +                       sb.append("componentClass=");
> +                       sb.append(getComponentClass().getName());
> +                       sb.append(',');
> +               }
> +               if (getComponentPath() != null)
> +               {
> +                       sb.append("componentPath=");
> +                       sb.append(getComponentPath());
> +                       sb.append(',');
> +               }
> +               sb.append("behaviorIndex=");
> +               sb.append(getBehaviorIndex());
> +               if (getBehaviorClass() != null)
> +               {
> +                       sb.append(",behaviorClass=");
> +                       sb.append(getBehaviorClass().getName());
> +               }
> +               if (getSubmittingComponentClass() != null)
> +               {
> +                       sb.append(",submittingComponentClass=");
> +                       sb.append(getSubmittingComponentClass().
> getName());
> +               }
> +               if (getSubmittingComponentPath() != null)
> +               {
> +                       sb.append(",submittingComponentPath=");
> +                       sb.append(getSubmittingComponentPath());
> +               }
> +               sb.append("}");
> +               return sb.toString();
> +       }
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> AbstractBookmarkableMapper.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/AbstractBookmarkableMapper.java
> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> AbstractBookmarkableMapper.java
> index cb372d8..ecb50a2 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> AbstractBookmarkableMapper.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> AbstractBookmarkableMapper.java
> @@ -23,7 +23,7 @@ import org.apache.wicket.IRequestListener;
>  import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceRequestHandler;
>  import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
>  import org.apache.wicket.core.request.handler.IPageRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -304,7 +304,7 @@ public abstract class AbstractBookmarkableMapper
> extends AbstractComponentMapper
>
>                 checkExpiration(provider, pageInfo);
>
> -               return new ListenerInterfaceRequestHandler(provider,
> componentInfo.getBehaviorId());
> +               return new ListenerRequestHandler(provider,
> componentInfo.getBehaviorId());
>         }
>
>         private void checkExpiration(PageProvider provider, PageInfo
> pageInfo)
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/MountedMapper.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/MountedMapper.java b/wicket-core/src/main/java/
> org/apache/wicket/core/request/mapper/MountedMapper.java
> index 1b6aa28..f9edf11 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/MountedMapper.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/MountedMapper.java
> @@ -18,7 +18,7 @@ package org.apache.wicket.core.request.mapper;
>
>  import java.util.function.Supplier;
>
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.request.IRequestHandler;
>  import org.apache.wicket.request.Request;
>  import org.apache.wicket.request.Url;
> @@ -158,10 +158,10 @@ public class MountedMapper extends
> AbstractBookmarkableMapper
>         {
>                 Url url = super.mapHandler(requestHandler);
>
> -               if (url == null && requestHandler instanceof
> ListenerInterfaceRequestHandler &&
> +               if (url == null && requestHandler instanceof
> ListenerRequestHandler &&
>                         getRecreateMountedPagesAfterExpiry())
>                 {
> -                       ListenerInterfaceRequestHandler handler = (
> ListenerInterfaceRequestHandler)requestHandler;
> +                       ListenerRequestHandler handler =
> (ListenerRequestHandler)requestHandler;
>                         IRequestablePage page = handler.getPage();
>                         if (checkPageInstance(page))
>                         {
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapper.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
> request/mapper/PageInstanceMapper.java b/wicket-core/src/main/java/
> org/apache/wicket/core/request/mapper/PageInstanceMapper.java
> index e983131..f90ea87 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapper.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapper.java
> @@ -16,7 +16,7 @@
>   */
>  package org.apache.wicket.core.request.mapper;
>
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -85,7 +85,7 @@ public class PageInstanceMapper extends
> AbstractComponentMapper
>
>                                         provider.setPageSource(
> getContext());
>
> -                                       return new
> ListenerInterfaceRequestHandler(provider, componentInfo.getBehaviorId());
> +                                       return new ListenerRequestHandler(provider,
> componentInfo.getBehaviorId());
>                                 }
>                         }
>                 }
> @@ -107,9 +107,9 @@ public class PageInstanceMapper extends
> AbstractComponentMapper
>                         PageInfo i = new PageInfo(page.getPageId());
>                         info = new PageComponentInfo(i, null);
>                 }
> -               else if (requestHandler instanceof
> ListenerInterfaceRequestHandler)
> +               else if (requestHandler instanceof ListenerRequestHandler)
>                 {
> -                       ListenerInterfaceRequestHandler handler = (
> ListenerInterfaceRequestHandler)requestHandler;
> +                       ListenerRequestHandler handler =
> (ListenerRequestHandler)requestHandler;
>                         IRequestablePage page = handler.getPage();
>                         String componentPath = handler.getComponentPath();
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/util/
> tester/BaseWicketTester.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
> b/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> index b5a15ec..0b30c92 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/
> BaseWicketTester.java
> @@ -62,7 +62,7 @@ import org.apache.wicket.ajax.markup.
> html.form.AjaxSubmitLink;
>  import org.apache.wicket.behavior.AbstractAjaxBehavior;
>  import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
>  import org.apache.wicket.core.request.handler.IPageProvider;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -1093,7 +1093,7 @@ public class BaseWicketTester
>
>                 // there are two ways to do this. RequestCycle could be
> forced to call the handler
>                 // directly but constructing and parsing the URL increases
> the chance of triggering bugs
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(new PageAndComponentProvider(
> +               IRequestHandler handler = new ListenerRequestHandler(new
> PageAndComponentProvider(
>                         component.getPage(), component));
>
>                 Url url = urlFor(handler);
> @@ -1119,7 +1119,7 @@ public class BaseWicketTester
>
>                 // there are two ways to do this. RequestCycle could be
> forced to call the handler
>                 // directly but constructing and parsing the URL increases
> the chance of triggering bugs
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(new PageAndComponentProvider(
> +               IRequestHandler handler = new ListenerRequestHandler(new
> PageAndComponentProvider(
>                         component.getPage(), component));
>
>                 processRequest(handler);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/
> BehaviorRequestTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
> b/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
> index 909ee23..1e5227c 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
> @@ -18,7 +18,7 @@ package org.apache.wicket;
>
>  import org.apache.wicket.behavior.Behavior;
>  import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.
> ListenerInvocationNotAllowedException;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.markup.ComponentTag;
> @@ -83,7 +83,7 @@ public class BehaviorRequestTest extends WicketTestCase
>                 final int index = page.container.getBehaviorId(
> behaviorUnderTest);
>                 final IPageAndComponentProvider provider = new
> PageAndComponentProvider(page,
>                         page.container);
> -               final IRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider, index);
> +               final IRequestHandler handler = new ListenerRequestHandler(provider,
> index);
>
>                 return tester.urlFor(handler).toString();
>         }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/
> ComponentWithLazyModelCreationTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/
> ComponentWithLazyModelCreationTest.java b/wicket-core/src/test/java/
> org/apache/wicket/ComponentWithLazyModelCreationTest.java
> index 59cd19e..9361351 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/
> ComponentWithLazyModelCreationTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/
> ComponentWithLazyModelCreationTest.java
> @@ -17,7 +17,7 @@
>  package org.apache.wicket;
>
>  import org.apache.wicket.behavior.Behavior;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.markup.ComponentTag;
>  import org.apache.wicket.markup.IMarkupResourceStreamProvider;
> @@ -120,7 +120,7 @@ public class ComponentWithLazyModelCreationTest
> extends WicketTestCase
>                 {
>                         super.onComponentTag(component, tag);
>                         int index = component.getBehaviorId(this);
> -                       IRequestHandler handler = new
> ListenerInterfaceRequestHandler(
> +                       IRequestHandler handler = new
> ListenerRequestHandler(
>                                 new PageAndComponentProvider(component.getPage(),
> component), index);
>                         statefullUrl = component.getRequestCycle().
> mapUrlFor(handler).toString();
>                 }
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandlerTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/handler/ListenerInterfaceRequestHandlerTest.java
> b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandlerTest.java
> deleted file mode 100644
> index d1c0592..0000000
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerInterfaceRequestHandlerTest.java
> +++ /dev/null
> @@ -1,208 +0,0 @@
> -/*
> - * Licensed to the Apache Software Foundation (ASF) under one or more
> - * contributor license agreements.  See the NOTICE file distributed with
> - * this work for additional information regarding copyright ownership.
> - * The ASF licenses this file to You under the Apache License, Version 2.0
> - * (the "License"); you may not use this file except in compliance with
> - * the License.  You may obtain a copy of the License at
> - *
> - *      http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> - * See the License for the specific language governing permissions and
> - * limitations under the License.
> - */
> -package org.apache.wicket.core.request.handler;
> -
> -import static org.hamcrest.Matchers.is;
> -
> -import java.io.IOException;
> -import java.text.ParseException;
> -
> -import org.apache.wicket.MarkupContainer;
> -import org.apache.wicket.Page;
> -import org.apache.wicket.Session;
> -import org.apache.wicket.WicketRuntimeException;
> -import org.apache.wicket.ajax.AjaxRequestTarget;
> -import org.apache.wicket.ajax.markup.html.AjaxLink;
> -import org.apache.wicket.core.request.mapper.MountedMapper;
> -import org.apache.wicket.markup.IMarkupFragment;
> -import org.apache.wicket.markup.IMarkupResourceStreamProvider;
> -import org.apache.wicket.markup.Markup;
> -import org.apache.wicket.markup.html.WebPage;
> -import org.apache.wicket.markup.html.link.Link;
> -import org.apache.wicket.markup.html.link.StatelessLink;
> -import org.apache.wicket.request.Url;
> -import org.apache.wicket.request.mapper.parameter.PageParameters;
> -import org.apache.wicket.resource.DummyPage;
> -import org.apache.wicket.util.resource.IResourceStream;
> -import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
> -import org.apache.wicket.util.resource.StringResourceStream;
> -import org.apache.wicket.util.tester.WicketTestCase;
> -import org.junit.Test;
> -
> -/**
> - * Tests for {@link ListenerInterfaceRequestHandler}
> - */
> -public class ListenerInterfaceRequestHandlerTest extends WicketTestCase
> -{
> -
> -       /**
> -        * WICKET-5466
> -        */
> -       @Test
> -       public void removedComponent()
> -       {
> -               // non-existing component on fresh page is ignored
> -               PageAndComponentProvider freshPage = new
> PageAndComponentProvider(DummyPage.class, null,
> -                       "foo");
> -               new ListenerInterfaceRequestHandle
> r(freshPage).respond(tester
> -                       .getRequestCycle());
> -
> -               // non-existing component on old page fails
> -               PageAndComponentProvider oldPage = new
> PageAndComponentProvider(new DummyPage(), "foo");
> -               try
> -               {
> -                       new ListenerInterfaceRequestHandler(oldPage)
> -                               .respond(tester.getRequestCycle());
> -                       fail();
> -               }
> -               catch (WicketRuntimeException ex)
> -               {
> -                       assertEquals("Component 'foo' has been removed
> from page.", ex.getMessage());
> -               }
> -       }
> -
> -       /**
> -        * https://issues.apache.org/jira/browse/WICKET-4116
> -        *
> -        * @throws Exception
> -        */
> -       @Test
> -       public void recreateThePageWhenListenereIn
> terfaceIsExecutedOnExpiredPage() throws Exception
> -       {
> -               tester.getApplication().mountPage("ajaxLink",
> AjaxLinkExpirePage.class);
> -               AjaxLinkExpirePage page = tester.startPage(
> AjaxLinkExpirePage.class);
> -
> -               int initialPageId = page.getPageId();
> -
> -               Url urlToAjaxLink = tester.urlFor(page.link);
> -               Session session = tester.getSession();
> -               session.clear();
> -
> -               // fire a request to the ajax link on the expired page
> -               executeAjaxUrlWithLastBaseUrl(urlToAjaxLink);
> -
> -               Page lastRenderedPage = tester.getLastRenderedPage();
> -               int lastRenderedPageId = lastRenderedPage.getPageId();
> -               assertTrue("A new page must be create ",
> lastRenderedPageId > initialPageId);
> -       }
> -
> -       private void executeAjaxUrlWithLastBaseUrl(Url url) throws
> IOException,
> -               ResourceStreamNotFoundException, ParseException
> -       {
> -               tester.getRequest().setUrl(url);
> -               tester.getRequest().addHeader("Wicket-Ajax-BaseURL",
> -                       tester.getWicketAjaxBaseUrlEncodedInL
> astResponse());
> -               tester.getRequest().addHeader("Wicket-Ajax", "true");
> -               tester.processRequest();
> -       }
> -
> -       /**
> -        * Test page for #recreateThePageWhenListenereIn
> terfaceIsExecutedOnExpiredPage()
> -        */
> -       public static class AjaxLinkExpirePage extends WebPage implements
> IMarkupResourceStreamProvider
> -       {
> -               private static final long serialVersionUID = 1L;
> -
> -               private AjaxLink<Void> link;
> -
> -               /**
> -                * Constructor.
> -                */
> -               public AjaxLinkExpirePage()
> -               {
> -                       add(link = new AjaxLink<Void>("test")
> -                       {
> -                               private static final long serialVersionUID
> = 1L;
> -
> -                               @Override
> -                               public void onClick(AjaxRequestTarget
> target)
> -                               {
> -                                       System.err.println("clicked");
> -                               }
> -                       });
> -               }
> -
> -               @Override
> -               public IResourceStream getMarkupResourceStream(MarkupContainer
> container,
> -                       Class<?> containerClass)
> -               {
> -
> -                       return new StringResourceStream(
> -                               "<html><body><a wicket:id='test'>Link</a></
> body></html>");
> -               }
> -
> -       }
> -
> -       /**
> -        * Testcase for WICKET-4185
> -        */
> -       @Test
> -       public void isPageInstanceCreatedOnClassLinks()
> -       {
> -               PageAndComponentProvider provider = new
> PageAndComponentProvider(Page.class, "link");
> -               ListenerInterfaceRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider);
> -               assertFalse("Handler should not report a page instance is
> available ",
> -                       handler.isPageInstanceCreated());
> -       }
> -
> -       @Test
> -       public void skipListenerIfExpiredPage()
> -       {
> -               tester.getApplication().getRootRequestMapperAsCompound()
> .add(new MountedMapper("/segment", NotExpiredPage.class));
> -               tester.startPage(NotExpiredPage.class);
> -               tester.clickLink("statelessLink");
> -               NotExpiredPage page = (NotExpiredPage)tester.
> getLastRenderedPage();
> -               assertThat(page.invoked, is(true));
> -       }
> -
> -       public static class NotExpiredPage extends WebPage
> -       {
> -               public boolean invoked;
> -
> -               public NotExpiredPage(PageParameters pageParameters)
> -               {
> -                       super(pageParameters);
> -                       add(new StatelessLink<Object>("statelessLink")
> -                       {
> -                               public void onClick()
> -                               {
> -                                       invoked = true;
> -                               }
> -                       });
> -                       add(new Link<Object>("statefullLink")
> -                       {
> -                               public void onClick()
> -                               {
> -                               }
> -                       });
> -               }
> -
> -               @Override
> -               public IMarkupFragment getMarkup()
> -               {
> -                       return Markup.of(
> -                               "<html><body><a
> wicket:id=\"statelessLink\"></a><a wicket:id=\"statefullLink\"></
> a></body></html>");
> -               }
> -
> -               @Override
> -               protected void onBeforeRender()
> -               {
> -                       get("statefullLink").setVisible(false);
> -                       super.onBeforeRender();
> -               }
> -       }
> -}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerRequestHandlerTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/handler/ListenerRequestHandlerTest.java
> b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerRequestHandlerTest.java
> new file mode 100644
> index 0000000..b212c9c
> --- /dev/null
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
> ListenerRequestHandlerTest.java
> @@ -0,0 +1,208 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.wicket.core.request.handler;
> +
> +import static org.hamcrest.Matchers.is;
> +
> +import java.io.IOException;
> +import java.text.ParseException;
> +
> +import org.apache.wicket.MarkupContainer;
> +import org.apache.wicket.Page;
> +import org.apache.wicket.Session;
> +import org.apache.wicket.WicketRuntimeException;
> +import org.apache.wicket.ajax.AjaxRequestTarget;
> +import org.apache.wicket.ajax.markup.html.AjaxLink;
> +import org.apache.wicket.core.request.mapper.MountedMapper;
> +import org.apache.wicket.markup.IMarkupFragment;
> +import org.apache.wicket.markup.IMarkupResourceStreamProvider;
> +import org.apache.wicket.markup.Markup;
> +import org.apache.wicket.markup.html.WebPage;
> +import org.apache.wicket.markup.html.link.Link;
> +import org.apache.wicket.markup.html.link.StatelessLink;
> +import org.apache.wicket.request.Url;
> +import org.apache.wicket.request.mapper.parameter.PageParameters;
> +import org.apache.wicket.resource.DummyPage;
> +import org.apache.wicket.util.resource.IResourceStream;
> +import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
> +import org.apache.wicket.util.resource.StringResourceStream;
> +import org.apache.wicket.util.tester.WicketTestCase;
> +import org.junit.Test;
> +
> +/**
> + * Tests for {@link ListenerRequestHandler}
> + */
> +public class ListenerRequestHandlerTest extends WicketTestCase
> +{
> +
> +       /**
> +        * WICKET-5466
> +        */
> +       @Test
> +       public void removedComponent()
> +       {
> +               // non-existing component on fresh page is ignored
> +               PageAndComponentProvider freshPage = new
> PageAndComponentProvider(DummyPage.class, null,
> +                       "foo");
> +               new ListenerRequestHandler(freshPage).respond(tester
> +                       .getRequestCycle());
> +
> +               // non-existing component on old page fails
> +               PageAndComponentProvider oldPage = new
> PageAndComponentProvider(new DummyPage(), "foo");
> +               try
> +               {
> +                       new ListenerRequestHandler(oldPage)
> +                               .respond(tester.getRequestCycle());
> +                       fail();
> +               }
> +               catch (WicketRuntimeException ex)
> +               {
> +                       assertEquals("Component 'foo' has been removed
> from page.", ex.getMessage());
> +               }
> +       }
> +
> +       /**
> +        * https://issues.apache.org/jira/browse/WICKET-4116
> +        *
> +        * @throws Exception
> +        */
> +       @Test
> +       public void recreateThePageWhenListenereIn
> terfaceIsExecutedOnExpiredPage() throws Exception
> +       {
> +               tester.getApplication().mountPage("ajaxLink",
> AjaxLinkExpirePage.class);
> +               AjaxLinkExpirePage page = tester.startPage(
> AjaxLinkExpirePage.class);
> +
> +               int initialPageId = page.getPageId();
> +
> +               Url urlToAjaxLink = tester.urlFor(page.link);
> +               Session session = tester.getSession();
> +               session.clear();
> +
> +               // fire a request to the ajax link on the expired page
> +               executeAjaxUrlWithLastBaseUrl(urlToAjaxLink);
> +
> +               Page lastRenderedPage = tester.getLastRenderedPage();
> +               int lastRenderedPageId = lastRenderedPage.getPageId();
> +               assertTrue("A new page must be create ",
> lastRenderedPageId > initialPageId);
> +       }
> +
> +       private void executeAjaxUrlWithLastBaseUrl(Url url) throws
> IOException,
> +               ResourceStreamNotFoundException, ParseException
> +       {
> +               tester.getRequest().setUrl(url);
> +               tester.getRequest().addHeader("Wicket-Ajax-BaseURL",
> +                       tester.getWicketAjaxBaseUrlEncodedInL
> astResponse());
> +               tester.getRequest().addHeader("Wicket-Ajax", "true");
> +               tester.processRequest();
> +       }
> +
> +       /**
> +        * Test page for #recreateThePageWhenListenereIn
> terfaceIsExecutedOnExpiredPage()
> +        */
> +       public static class AjaxLinkExpirePage extends WebPage implements
> IMarkupResourceStreamProvider
> +       {
> +               private static final long serialVersionUID = 1L;
> +
> +               private AjaxLink<Void> link;
> +
> +               /**
> +                * Constructor.
> +                */
> +               public AjaxLinkExpirePage()
> +               {
> +                       add(link = new AjaxLink<Void>("test")
> +                       {
> +                               private static final long serialVersionUID
> = 1L;
> +
> +                               @Override
> +                               public void onClick(AjaxRequestTarget
> target)
> +                               {
> +                                       System.err.println("clicked");
> +                               }
> +                       });
> +               }
> +
> +               @Override
> +               public IResourceStream getMarkupResourceStream(MarkupContainer
> container,
> +                       Class<?> containerClass)
> +               {
> +
> +                       return new StringResourceStream(
> +                               "<html><body><a wicket:id='test'>Link</a></
> body></html>");
> +               }
> +
> +       }
> +
> +       /**
> +        * Testcase for WICKET-4185
> +        */
> +       @Test
> +       public void isPageInstanceCreatedOnClassLinks()
> +       {
> +               PageAndComponentProvider provider = new
> PageAndComponentProvider(Page.class, "link");
> +               ListenerRequestHandler handler = new
> ListenerRequestHandler(provider);
> +               assertFalse("Handler should not report a page instance is
> available ",
> +                       handler.isPageInstanceCreated());
> +       }
> +
> +       @Test
> +       public void skipListenerIfExpiredPage()
> +       {
> +               tester.getApplication().getRootRequestMapperAsCompound()
> .add(new MountedMapper("/segment", NotExpiredPage.class));
> +               tester.startPage(NotExpiredPage.class);
> +               tester.clickLink("statelessLink");
> +               NotExpiredPage page = (NotExpiredPage)tester.
> getLastRenderedPage();
> +               assertThat(page.invoked, is(true));
> +       }
> +
> +       public static class NotExpiredPage extends WebPage
> +       {
> +               public boolean invoked;
> +
> +               public NotExpiredPage(PageParameters pageParameters)
> +               {
> +                       super(pageParameters);
> +                       add(new StatelessLink<Object>("statelessLink")
> +                       {
> +                               public void onClick()
> +                               {
> +                                       invoked = true;
> +                               }
> +                       });
> +                       add(new Link<Object>("statefullLink")
> +                       {
> +                               public void onClick()
> +                               {
> +                               }
> +                       });
> +               }
> +
> +               @Override
> +               public IMarkupFragment getMarkup()
> +               {
> +                       return Markup.of(
> +                               "<html><body><a
> wicket:id=\"statelessLink\"></a><a wicket:id=\"statefullLink\"></
> a></body></html>");
> +               }
> +
> +               @Override
> +               protected void onBeforeRender()
> +               {
> +                       get("statefullLink").setVisible(false);
> +                       super.onBeforeRender();
> +               }
> +       }
> +}
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> BookmarkableMapperTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/
> org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
> index f4fc1aa..e22210b 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> BookmarkableMapperTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> BookmarkableMapperTest.java
> @@ -28,7 +28,7 @@ import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceReque
>  import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
>  import org.apache.wicket.core.request.handler.IPageProvider;
>  import org.apache.wicket.core.request.handler.IPageRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -177,9 +177,9 @@ public class BookmarkableMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("wicket/bookmarkable/" +
> PAGE_CLASS_NAME + "?15--foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -198,8 +198,8 @@ public class BookmarkableMapperTest extends
> AbstractMapperTest
>                         + "/i1/i2?15--foo-bar&a=b&b=c");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -222,9 +222,9 @@ public class BookmarkableMapperTest extends
> AbstractMapperTest
>                         + "?15-ILinkListener.4-foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -246,8 +246,8 @@ public class BookmarkableMapperTest extends
> AbstractMapperTest
>
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 assertEquals(page.getRenderCount(), 5);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> CryptoMapperTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/mapper/CryptoMapperTest.java b/wicket-core/src/test/java/
> org/apache/wicket/core/request/mapper/CryptoMapperTest.java
> index 98696fd..f87dcc8 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> CryptoMapperTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> CryptoMapperTest.java
> @@ -22,7 +22,7 @@ import java.util.function.Supplier;
>
>  import org.apache.wicket.MockPage;
>  import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -358,7 +358,7 @@ public class CryptoMapperTest extends
> AbstractMapperTest
>                 final String componentPath = "link";
>
>                 PageAndComponentProvider provider = new
> PageAndComponentProvider(Page1.class, componentPath);
> -               IRequestHandler requestHandler = new
> ListenerInterfaceRequestHandler(provider);
> +               IRequestHandler requestHandler = new
> ListenerRequestHandler(provider);
>
>                 Url plainUrl = mapper.getDelegateMapper().
> mapHandler(requestHandler);
>                 assertTrue(plainUrl.toString().startsWith(MOUNTED_URL));
> @@ -391,9 +391,9 @@ public class CryptoMapperTest extends
> AbstractMapperTest
>
>                 requestHandler = unwrapRequestHandlerDelegate(
> requestHandler);
>
> -               assertThat(requestHandler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(requestHandler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler handler = (
> ListenerInterfaceRequestHandler) requestHandler;
> +               ListenerRequestHandler handler = (ListenerRequestHandler)
> requestHandler;
>                 assertEquals(componentPath, handler.getComponentPath());
>                 assertEquals(Page1.class, handler.getPageClass());
>
> @@ -407,9 +407,9 @@ public class CryptoMapperTest extends
> AbstractMapperTest
>
>                 requestHandler = unwrapRequestHandlerDelegate(
> requestHandler);
>
> -               assertThat(requestHandler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(requestHandler, instanceOf(
> ListenerRequestHandler.class));
>
> -               handler = (ListenerInterfaceRequestHandler)
> requestHandler;
> +               handler = (ListenerRequestHandler) requestHandler;
>                 assertEquals(componentPath, handler.getComponentPath());
>                 assertEquals(Page1.class, handler.getPageClass());
>         }
> @@ -603,7 +603,7 @@ public class CryptoMapperTest extends
> AbstractMapperTest
>                 MockPage page = new MockPage();
>                 IRequestableComponent c = page.get("foo:bar");
>                 PageAndComponentProvider provider = new
> PageAndComponentProvider(page, c);
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider);
> +               IRequestHandler handler = new ListenerRequestHandler(
> provider);
>
>                 Url url = mapper.mapHandler(handler);
>                 url.addQueryParameter("q", "foo");
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> MountedMapperTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/mapper/MountedMapperTest.java b/wicket-core/src/test/java/
> org/apache/wicket/core/request/mapper/MountedMapperTest.java
> index d92cc83..f19d866 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> MountedMapperTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> MountedMapperTest.java
> @@ -23,7 +23,7 @@ import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceReque
>  import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
>  import org.apache.wicket.core.request.handler.IPageProvider;
>  import org.apache.wicket.core.request.handler.IPageRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -210,9 +210,9 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("some/mount/path?15--foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -230,8 +230,8 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("some/mount/path/i1/
> i2?15--foo-bar&a=b&b=c");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -253,9 +253,9 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("some/mount/path?
> param1=value1&15-.4-foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -298,9 +298,9 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 context.setNextPageRenderCount(5);
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 assertEquals(5, page.getRenderCount());
> @@ -329,9 +329,9 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("some/mount/path/i1/
> i2?-1.-foo-bar&a=b&b=c");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 1);
>
> @@ -497,7 +497,7 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 IRequestableComponent c = page.get("foo:bar");
>
>                 PageAndComponentProvider provider = new
> PageAndComponentProvider(page, c);
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider);
> +               IRequestHandler handler = new ListenerRequestHandler(
> provider);
>
>                 Url url = encoder.mapHandler(handler);
>
> @@ -555,7 +555,7 @@ public class MountedMapperTest extends
> AbstractMapperTest
>                 IRequestableComponent c = page.get("foo:bar");
>
>                 PageAndComponentProvider provider = new
> PageAndComponentProvider(page, c);
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider, 4);
> +               IRequestHandler handler = new ListenerRequestHandler(provider,
> 4);
>
>                 Url url = encoder.mapHandler(handler);
>
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PackageMapperTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/
> org/apache/wicket/core/request/mapper/PackageMapperTest.java
> index 6a620ad..b0bb221 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PackageMapperTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PackageMapperTest.java
> @@ -25,7 +25,7 @@ import org.apache.wicket.core.request.handler.
> BookmarkableListenerInterfaceReque
>  import org.apache.wicket.core.request.handler.
> BookmarkablePageRequestHandler;
>  import org.apache.wicket.core.request.handler.IPageProvider;
>  import org.apache.wicket.core.request.handler.IPageRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -243,9 +243,9 @@ public class PackageMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
> "?15--foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -263,8 +263,8 @@ public class PackageMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
> "/i1/i2?15--foo-bar&a=b&b=c");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -286,9 +286,9 @@ public class PackageMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
> "?15-.4-foo-bar");
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 checkPage(page, 15);
> @@ -309,8 +309,8 @@ public class PackageMapperTest extends
> AbstractMapperTest
>
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
>
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>
>                 IRequestablePage page = h.getPage();
>                 assertEquals(page.getRenderCount(), 5);
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapperTest.java
> ----------------------------------------------------------------------
> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
> request/mapper/PageInstanceMapperTest.java b/wicket-core/src/test/java/
> org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java
> index 9a2eaf0..2691070 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapperTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
> PageInstanceMapperTest.java
> @@ -24,7 +24,7 @@ import java.util.Locale;
>  import org.apache.wicket.MockPage;
>  import org.apache.wicket.core.request.handler.IPageProvider;
>  import org.apache.wicket.core.request.handler.IPageRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.core.request.handler.PageProvider;
>  import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
> @@ -90,9 +90,9 @@ public class PageInstanceMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("wicket/page?4--a-b-c");
>
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>                 checkPage(h.getPage(), 4);
>                 assertEquals(h.getComponent().getPageRelativePath(),
> "a:b:c");
>                 assertNull(h.getBehaviorIndex());
> @@ -131,9 +131,9 @@ public class PageInstanceMapperTest extends
> AbstractMapperTest
>                 Url url = Url.parse("wicket/page?4-
> ILinkListener.5-a-b-c");
>
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>                 checkPage(h.getPage(), 4);
>                 assertEquals(h.getComponent().getPageRelativePath(),
> "a:b:c");
>                 assertEquals((Object)5, h.getBehaviorIndex());
> @@ -150,9 +150,9 @@ public class PageInstanceMapperTest extends
> AbstractMapperTest
>                 context.setNextPageRenderCount(6);
>
>                 IRequestHandler handler = encoder.mapRequest(getRequest(
> url));
> -               assertThat(handler, instanceOf(
> ListenerInterfaceRequestHandler.class));
> +               assertThat(handler, instanceOf(
> ListenerRequestHandler.class));
>
> -               ListenerInterfaceRequestHandler h = (
> ListenerInterfaceRequestHandler)handler;
> +               ListenerRequestHandler h = (ListenerRequestHandler)
> handler;
>                 assertEquals(6, h.getPage().getRenderCount());
>         }
>
> @@ -287,7 +287,7 @@ public class PageInstanceMapperTest extends
> AbstractMapperTest
>                 IRequestableComponent c = page.get("a:b:c");
>
>                 PageAndComponentProvider provider = new
> PageAndComponentProvider(page, c);
> -               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(provider);
> +               IRequestHandler handler = new ListenerRequestHandler(
> provider);
>
>                 Url url = encoder.mapHandler(handler);
>                 assertEquals("wicket/page?15-5.-a-b-c", url.toString());
>
> http://git-wip-us.apache.org/repos/asf/wicket/blob/
> 8342e4ef/wicket-examples/src/main/java/org/apache/wicket/
> examples/ajax/prototype/Index.java
> ----------------------------------------------------------------------
> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
> examples/ajax/prototype/Index.java b/wicket-examples/src/main/
> java/org/apache/wicket/examples/ajax/prototype/Index.java
> index 2795eb5..c62ce4b 100644
> --- a/wicket-examples/src/main/java/org/apache/wicket/
> examples/ajax/prototype/Index.java
> +++ b/wicket-examples/src/main/java/org/apache/wicket/
> examples/ajax/prototype/Index.java
> @@ -17,7 +17,7 @@
>  package org.apache.wicket.examples.ajax.prototype;
>
>  import org.apache.wicket.core.request.handler.
> ComponentRenderingRequestHandler;
> -import org.apache.wicket.core.request.handler.
> ListenerInterfaceRequestHandler;
> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>  import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>  import org.apache.wicket.examples.WicketExamplePage;
>  import org.apache.wicket.markup.html.basic.Label;
> @@ -79,8 +79,7 @@ public class Index extends WicketExamplePage
>                         @Override
>                         protected String getOnClickScript(CharSequence url)
>                         {
> -                               IRequestHandler handler = new
> ListenerInterfaceRequestHandler(
> -                                       new PageAndComponentProvider(getPage(),
> this));
> +                               IRequestHandler handler = new
> ListenerRequestHandler(new PageAndComponentProvider(getPage(), this));
>                                 Url componentUrl =
> RequestCycle.get().mapUrlFor(handler);
>                                 componentUrl.addQueryParameter("anticache",
> Math.random());
>                                 return new AppendingStringBuffer("new
> Ajax.Updater('counter', '").append(
>
>

Re: wicket git commit: WICKET-6137 renamed ListenerInterfaceRequestHandler to ListenerRequestHandler

Posted by Sven Meier <sv...@meiers.net>.
Oh yes, there goes another one.

I'll do a text search ...

Thanks
Sven


On 30.01.2017 17:01, Martin Grigorov wrote:
> What
> about org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler
> ?
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Mon, Jan 30, 2017 at 4:51 PM, <sv...@apache.org> wrote:
>
>> Repository: wicket
>> Updated Branches:
>>    refs/heads/master 16e44ce98 -> 8342e4ef9
>>
>>
>> WICKET-6137 renamed ListenerInterfaceRequestHandler to
>> ListenerRequestHandler
>>
>> there isn't a ..ListenerInterface any more
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8342e4ef
>> Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8342e4ef
>> Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8342e4ef
>>
>> Branch: refs/heads/master
>> Commit: 8342e4ef9acd442ddfe7ad78d04838d17c1b9fec
>> Parents: 16e44ce
>> Author: Sven Meier <sv...@apache.org>
>> Authored: Mon Jan 30 16:50:26 2017 +0100
>> Committer: Sven Meier <sv...@apache.org>
>> Committed: Mon Jan 30 16:50:26 2017 +0100
>>
>> ----------------------------------------------------------------------
>>   .../main/java/org/apache/wicket/Component.java  |   4 +-
>>   ...markableListenerInterfaceRequestHandler.java |   2 +-
>>   .../ListenerInterfaceRequestHandler.java        | 327 -------------------
>>   .../request/handler/ListenerRequestHandler.java | 327 +++++++++++++++++++
>>   .../logger/ListenerInterfaceLogData.java        | 214 ------------
>>   .../request/handler/logger/ListenerLogData.java | 214 ++++++++++++
>>   .../mapper/AbstractBookmarkableMapper.java      |   4 +-
>>   .../core/request/mapper/MountedMapper.java      |   6 +-
>>   .../core/request/mapper/PageInstanceMapper.java |   8 +-
>>   .../wicket/util/tester/BaseWicketTester.java    |   6 +-
>>   .../org/apache/wicket/BehaviorRequestTest.java  |   4 +-
>>   .../ComponentWithLazyModelCreationTest.java     |   4 +-
>>   .../ListenerInterfaceRequestHandlerTest.java    | 208 ------------
>>   .../handler/ListenerRequestHandlerTest.java     | 208 ++++++++++++
>>   .../request/mapper/BookmarkableMapperTest.java  |  18 +-
>>   .../core/request/mapper/CryptoMapperTest.java   |  14 +-
>>   .../core/request/mapper/MountedMapperTest.java  |  26 +-
>>   .../core/request/mapper/PackageMapperTest.java  |  18 +-
>>   .../request/mapper/PageInstanceMapperTest.java  |  16 +-
>>   .../wicket/examples/ajax/prototype/Index.java   |   5 +-
>>   20 files changed, 816 insertions(+), 817 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/Component.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java
>> b/wicket-core/src/main/java/org/apache/wicket/Component.java
>> index 97262ed..a6aa54f 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/Component.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
>> @@ -32,7 +32,7 @@ import org.apache.wicket.authorization.
>> UnauthorizedActionException;
>>   import org.apache.wicket.authorization.strategies.page.
>> SimplePageAuthorizationStrategy;
>>   import org.apache.wicket.behavior.Behavior;
>>   import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.util.lang.WicketObjects;
>>   import org.apache.wicket.core.util.string.ComponentStrings;
>> @@ -3396,7 +3396,7 @@ public abstract class Component
>>                  }
>>                  else
>>                  {
>> -                       return new ListenerInterfaceRequestHandler(provider,
>> id);
>> +                       return new ListenerRequestHandler(provider, id);
>>                  }
>>          }
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> BookmarkableListenerInterfaceRequestHandler.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/BookmarkableListenerInterfaceRequestHandler.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> BookmarkableListenerInterfaceRequestHandler.java
>> index b3de191..772e215 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> BookmarkableListenerInterfaceRequestHandler.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> BookmarkableListenerInterfaceRequestHandler.java
>> @@ -25,7 +25,7 @@ import org.apache.wicket.util.lang.Args;
>>
>>   /**
>>    * Request handler for bookmarkable pages with an {@link
>> IRequestListener}. This handler is only used to
>> - * generate URLs. Rendering is always handled by {@link
>> ListenerInterfaceRequestHandler}.
>> + * generate URLs. Rendering is always handled by {@link
>> ListenerRequestHandler}.
>>    *
>>    * @author Matej Knopp
>>    */
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandler.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/ListenerInterfaceRequestHandler.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandler.java
>> deleted file mode 100644
>> index c976a42..0000000
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandler.java
>> +++ /dev/null
>> @@ -1,327 +0,0 @@
>> -/*
>> - * Licensed to the Apache Software Foundation (ASF) under one or more
>> - * contributor license agreements.  See the NOTICE file distributed with
>> - * this work for additional information regarding copyright ownership.
>> - * The ASF licenses this file to You under the Apache License, Version 2.0
>> - * (the "License"); you may not use this file except in compliance with
>> - * the License.  You may obtain a copy of the License at
>> - *
>> - *      http://www.apache.org/licenses/LICENSE-2.0
>> - *
>> - * Unless required by applicable law or agreed to in writing, software
>> - * distributed under the License is distributed on an "AS IS" BASIS,
>> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> - * See the License for the specific language governing permissions and
>> - * limitations under the License.
>> - */
>> -package org.apache.wicket.core.request.handler;
>> -
>> -import org.apache.wicket.Component;
>> -import org.apache.wicket.IRequestListener;
>> -import org.apache.wicket.Page;
>> -import org.apache.wicket.WicketRuntimeException;
>> -import org.apache.wicket.behavior.Behavior;
>> -import org.apache.wicket.core.request.handler.RenderPageRequestHandler.
>> RedirectPolicy;
>> -import org.apache.wicket.core.request.handler.logger.
>> ListenerInterfaceLogData;
>> -import org.apache.wicket.request.ILoggableRequestHandler;
>> -import org.apache.wicket.request.IRequestCycle;
>> -import org.apache.wicket.request.component.IRequestableComponent;
>> -import org.apache.wicket.request.component.IRequestablePage;
>> -import org.apache.wicket.request.http.WebRequest;
>> -import org.apache.wicket.request.mapper.parameter.PageParameters;
>> -import org.apache.wicket.util.lang.Args;
>> -import org.slf4j.Logger;
>> -import org.slf4j.LoggerFactory;
>> -
>> -/**
>> - * Request handler that invokes an {@link IRequestListener} on component
>> or behavior and renders page afterwards.
>> - *
>> - * @author Matej Knopp
>> - */
>> -public class ListenerInterfaceRequestHandler
>> -       implements
>> -               IPageRequestHandler,
>> -               IComponentRequestHandler,
>> -               ILoggableRequestHandler
>> -{
>> -
>> -       private static final Logger LOG = LoggerFactory.getLogger(
>> ListenerInterfaceRequestHandler.class);
>> -
>> -       private final IPageAndComponentProvider pageComponentProvider;
>> -
>> -       private final Integer behaviorId;
>> -
>> -       private ListenerInterfaceLogData logData;
>> -
>> -       /**
>> -        * Construct.
>> -        *
>> -        * @param pageComponentProvider
>> -        * @param behaviorIndex
>> -        */
>> -       public ListenerInterfaceRequestHandler(IPageAndComponentProvider
>> pageComponentProvider, Integer behaviorIndex)
>> -       {
>> -               Args.notNull(pageComponentProvider,
>> "pageComponentProvider");
>> -
>> -               this.pageComponentProvider = pageComponentProvider;
>> -               behaviorId = behaviorIndex;
>> -       }
>> -
>> -       /**
>> -        * Construct.
>> -        *
>> -        * @param pageComponentProvider
>> -        */
>> -       public ListenerInterfaceRequestHandler(PageAndComponentProvider
>> pageComponentProvider)
>> -       {
>> -               this(pageComponentProvider, null);
>> -       }
>> -
>> -       public boolean includeRenderCount() {
>> -               if (behaviorId == null) {
>> -                       return ((IRequestListener)
>> getComponent()).rendersPage();
>> -               } else {
>> -                       return ((IRequestListener)getComponent().
>> getBehaviorById(getBehaviorIndex())).rendersPage();
>> -               }
>> -       }
>> -
>> -       @Override
>> -       public IRequestableComponent getComponent()
>> -       {
>> -               return pageComponentProvider.getComponent();
>> -       }
>> -
>> -       @Override
>> -       public IRequestablePage getPage()
>> -       {
>> -               return pageComponentProvider.getPageInstance();
>> -       }
>> -
>> -       @Override
>> -       public Class<? extends IRequestablePage> getPageClass()
>> -       {
>> -               return pageComponentProvider.getPageClass();
>> -       }
>> -
>> -       @Override
>> -       public Integer getPageId()
>> -       {
>> -               return pageComponentProvider.getPageId();
>> -       }
>> -
>> -       @Override
>> -       public PageParameters getPageParameters()
>> -       {
>> -               return pageComponentProvider.getPageParameters();
>> -       }
>> -
>> -       @Override
>> -       public void detach(IRequestCycle requestCycle)
>> -       {
>> -               if (logData == null)
>> -               {
>> -                       logData = new ListenerInterfaceLogData(pageComponentProvider,
>> behaviorId);
>> -               }
>> -               pageComponentProvider.detach();
>> -       }
>> -
>> -       /**
>> -        * Index of target behavior or <code>null</code> if component is
>> the target.
>> -        *
>> -        * @return behavior index or <code>null</code>
>> -        */
>> -       public Integer getBehaviorIndex()
>> -       {
>> -               return behaviorId;
>> -       }
>> -
>> -       @Override
>> -       public void respond(final IRequestCycle requestCycle)
>> -       {
>> -               final IRequestablePage page = getPage();
>> -               final boolean freshPage = pageComponentProvider.
>> isPageInstanceFresh();
>> -               final boolean isAjax = ((WebRequest)requestCycle.
>> getRequest()).isAjax();
>> -
>> -               IRequestableComponent component;
>> -               try
>> -               {
>> -                       component = getComponent();
>> -               }
>> -               catch (ComponentNotFoundException e)
>> -               {
>> -                       // either the page is stateless and the component
>> we are looking for is not added in the
>> -                       // constructor
>> -                       // or the page is stateful+stale and a new
>> instances was created by pageprovider
>> -                       // we denote this by setting component to null
>> -                       component = null;
>> -               }
>> -
>> -               if ((component == null && !freshPage) || (component !=
>> null && component.getPage() != page))
>> -               {
>> -                       throw new ComponentNotFoundException("Component
>> '" + getComponentPath()
>> -                                       + "' has been removed from page.");
>> -               }
>> -
>> -               if (page instanceof Page)
>> -               {
>> -                       // initialize the page to be able to check whether
>> it is stateless
>> -                       ((Page)page).internalInitialize();
>> -               }
>> -
>> -               RedirectPolicy policy = page.isPageStateless()
>> -                       ? RedirectPolicy.NEVER_REDIRECT
>> -                       : RedirectPolicy.AUTO_REDIRECT;
>> -
>> -               boolean blockIfExpired = component != null && !component.
>> canCallListenerInterfaceAfterExpiry();
>> -
>> -               boolean lateComponent = component == null && freshPage;
>> -
>> -               if ((pageComponentProvider.wasExpired() &&
>> blockIfExpired) || lateComponent)
>> -               {
>> -                       // A request listener is invoked on an expired
>> page or the component couldn't be
>> -                       // determined. The best we can do is to re-paint
>> the newly constructed page.
>> -                       // Reference: WICKET-4454, WICKET-6288
>> -
>> -                       if (LOG.isDebugEnabled())
>> -                       {
>> -                               LOG.debug(
>> -                                       "An IRequestListener was called
>> but its page/component({}) couldn't be resolved. "
>> -                                               + "Scheduling re-create of
>> the page and ignoring the listener interface...",
>> -                                       getComponentPath());
>> -                       }
>> -
>> -                       if (isAjax)
>> -                       {
>> -                               policy = RedirectPolicy.ALWAYS_REDIRECT;
>> -                       }
>> -
>> -                       requestCycle.scheduleRequestHandlerAfterCurrent(new
>> RenderPageRequestHandler(
>> -                               new PageProvider(page), policy));
>> -                       return;
>> -               }
>> -
>> -               invokeListener(requestCycle, policy, isAjax);
>> -       }
>> -
>> -       private void invokeListener(IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax)
>> -       {
>> -               if (getBehaviorIndex() == null)
>> -               {
>> -                       invoke(requestCycle, policy, ajax, getComponent());
>> -               }
>> -               else
>> -               {
>> -                       try
>> -                       {
>> -                               Behavior behavior = getComponent().
>> getBehaviorById(behaviorId);
>> -                               invoke(requestCycle, policy, ajax,
>> getComponent(), behavior);
>> -                       }
>> -                       catch (IndexOutOfBoundsException e)
>> -                       {
>> -                               throw new WicketRuntimeException("Couldn't
>> find component behavior.", e);
>> -                       }
>> -
>> -               }
>> -       }
>> -
>> -       /**
>> -        * Invokes a given interface on a component.
>> -        *
>> -        * @param rcomponent
>> -        *            The component
>> -        *
>> -        * @throws ListenerInvocationNotAllowedException
>> -        *             when listener invocation attempted on a component
>> that does not allow it
>> -        */
>> -       private final void invoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final IRequestableComponent rcomponent)
>> -       {
>> -               // we are in Wicket core land
>> -               final Component component = (Component)rcomponent;
>> -
>> -               if (!component.canCallListenerInterface())
>> -               {
>> -                       // just return so that we have a silent fail and
>> just re-render the
>> -                       // page
>> -                       LOG.info("component not enabled or visible;
>> ignoring call. Component: " + component);
>> -                       throw new ListenerInvocationNotAllowedException(component,
>> null,
>> -                               "Component rejected interface invocation");
>> -               }
>> -
>> -               internalInvoke(requestCycle, policy, ajax, component,
>> component);
>> -       }
>> -
>> -       /**
>> -        * Invokes a given interface on a component's behavior.
>> -        *
>> -        * @param rcomponent
>> -        *            The component
>> -        * @param behavior
>> -        * @throws ListenerInvocationNotAllowedException
>> -        *             when listener invocation attempted on a component
>> that does not allow it
>> -        */
>> -       private final void invoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final IRequestableComponent
>> rcomponent, final Behavior behavior)
>> -       {
>> -               // we are in Wicket core land
>> -               final Component component = (Component)rcomponent;
>> -
>> -               if (!behavior.canCallListenerInterface(component))
>> -               {
>> -                       LOG.warn("behavior not enabled; ignore call.
>> Behavior {} at component {}", behavior,
>> -                               component);
>> -                       throw new ListenerInvocationNotAllowedException(component,
>> behavior,
>> -                               "Behavior rejected interface invocation.
>> ");
>> -               }
>> -
>> -               internalInvoke(requestCycle, policy, ajax, component,
>> behavior);
>> -       }
>> -
>> -       private void internalInvoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final Component component, final
>> Object target)
>> -       {
>> -               // save a reference to the page because the component can
>> be removed
>> -               // during the invocation of the listener and thus lose its
>> parent
>> -               Page page = component.getPage();
>> -
>> -               // initialization is required for stateless pages
>> -               if (!page.isInitialized())
>> -               {
>> -                       page.internalInitialize();
>> -               }
>> -
>> -               IRequestListener requestListener =
>> (IRequestListener)target;
>> -
>> -               if (requestListener.rendersPage() && !ajax)
>> -               {
>> -                       // schedule page render after current request
>> handler is done. this can be
>> -                       // overridden during invocation of listener
>> -                       // method (i.e. by calling
>> RequestCycle#setResponsePage)
>> -                       requestCycle.scheduleRequestHandlerAfterCurrent(new
>> RenderPageRequestHandler(
>> -                               new PageProvider(page), policy));
>> -               }
>> -
>> -               requestListener.onRequest();
>> -       }
>> -
>> -       @Override
>> -       public final boolean isPageInstanceCreated()
>> -       {
>> -               return pageComponentProvider.hasPageInstance();
>> -       }
>> -
>> -       @Override
>> -       public final String getComponentPath()
>> -       {
>> -               return pageComponentProvider.getComponentPath();
>> -       }
>> -
>> -       @Override
>> -       public final Integer getRenderCount()
>> -       {
>> -               return pageComponentProvider.getRenderCount();
>> -       }
>> -
>> -       @Override
>> -       public ListenerInterfaceLogData getLogData()
>> -       {
>> -               return logData;
>> -       }
>> -}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> ListenerRequestHandler.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/ListenerRequestHandler.java b/wicket-core/src/main/java/
>> org/apache/wicket/core/request/handler/ListenerRequestHandler.java
>> new file mode 100644
>> index 0000000..3f131e3
>> --- /dev/null
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/
>> ListenerRequestHandler.java
>> @@ -0,0 +1,327 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.wicket.core.request.handler;
>> +
>> +import org.apache.wicket.Component;
>> +import org.apache.wicket.IRequestListener;
>> +import org.apache.wicket.Page;
>> +import org.apache.wicket.WicketRuntimeException;
>> +import org.apache.wicket.behavior.Behavior;
>> +import org.apache.wicket.core.request.handler.RenderPageRequestHandler.
>> RedirectPolicy;
>> +import org.apache.wicket.core.request.handler.logger.ListenerLogData;
>> +import org.apache.wicket.request.ILoggableRequestHandler;
>> +import org.apache.wicket.request.IRequestCycle;
>> +import org.apache.wicket.request.component.IRequestableComponent;
>> +import org.apache.wicket.request.component.IRequestablePage;
>> +import org.apache.wicket.request.http.WebRequest;
>> +import org.apache.wicket.request.mapper.parameter.PageParameters;
>> +import org.apache.wicket.util.lang.Args;
>> +import org.slf4j.Logger;
>> +import org.slf4j.LoggerFactory;
>> +
>> +/**
>> + * Request handler that invokes an {@link IRequestListener} on component
>> or behavior and renders page afterwards.
>> + *
>> + * @author Matej Knopp
>> + */
>> +public class ListenerRequestHandler
>> +       implements
>> +               IPageRequestHandler,
>> +               IComponentRequestHandler,
>> +               ILoggableRequestHandler
>> +{
>> +
>> +       private static final Logger LOG = LoggerFactory.getLogger(
>> ListenerRequestHandler.class);
>> +
>> +       private final IPageAndComponentProvider pageComponentProvider;
>> +
>> +       private final Integer behaviorId;
>> +
>> +       private ListenerLogData logData;
>> +
>> +       /**
>> +        * Construct.
>> +        *
>> +        * @param pageComponentProvider
>> +        * @param behaviorIndex
>> +        */
>> +       public ListenerRequestHandler(IPageAndComponentProvider
>> pageComponentProvider, Integer behaviorIndex)
>> +       {
>> +               Args.notNull(pageComponentProvider,
>> "pageComponentProvider");
>> +
>> +               this.pageComponentProvider = pageComponentProvider;
>> +               behaviorId = behaviorIndex;
>> +       }
>> +
>> +       /**
>> +        * Construct.
>> +        *
>> +        * @param pageComponentProvider
>> +        */
>> +       public ListenerRequestHandler(PageAndComponentProvider
>> pageComponentProvider)
>> +       {
>> +               this(pageComponentProvider, null);
>> +       }
>> +
>> +       public boolean includeRenderCount() {
>> +               if (behaviorId == null) {
>> +                       return ((IRequestListener)
>> getComponent()).rendersPage();
>> +               } else {
>> +                       return ((IRequestListener)getComponent().
>> getBehaviorById(getBehaviorIndex())).rendersPage();
>> +               }
>> +       }
>> +
>> +       @Override
>> +       public IRequestableComponent getComponent()
>> +       {
>> +               return pageComponentProvider.getComponent();
>> +       }
>> +
>> +       @Override
>> +       public IRequestablePage getPage()
>> +       {
>> +               return pageComponentProvider.getPageInstance();
>> +       }
>> +
>> +       @Override
>> +       public Class<? extends IRequestablePage> getPageClass()
>> +       {
>> +               return pageComponentProvider.getPageClass();
>> +       }
>> +
>> +       @Override
>> +       public Integer getPageId()
>> +       {
>> +               return pageComponentProvider.getPageId();
>> +       }
>> +
>> +       @Override
>> +       public PageParameters getPageParameters()
>> +       {
>> +               return pageComponentProvider.getPageParameters();
>> +       }
>> +
>> +       @Override
>> +       public void detach(IRequestCycle requestCycle)
>> +       {
>> +               if (logData == null)
>> +               {
>> +                       logData = new ListenerLogData(pageComponentProvider,
>> behaviorId);
>> +               }
>> +               pageComponentProvider.detach();
>> +       }
>> +
>> +       /**
>> +        * Index of target behavior or <code>null</code> if component is
>> the target.
>> +        *
>> +        * @return behavior index or <code>null</code>
>> +        */
>> +       public Integer getBehaviorIndex()
>> +       {
>> +               return behaviorId;
>> +       }
>> +
>> +       @Override
>> +       public void respond(final IRequestCycle requestCycle)
>> +       {
>> +               final IRequestablePage page = getPage();
>> +               final boolean freshPage = pageComponentProvider.
>> isPageInstanceFresh();
>> +               final boolean isAjax = ((WebRequest)requestCycle.
>> getRequest()).isAjax();
>> +
>> +               IRequestableComponent component;
>> +               try
>> +               {
>> +                       component = getComponent();
>> +               }
>> +               catch (ComponentNotFoundException e)
>> +               {
>> +                       // either the page is stateless and the component
>> we are looking for is not added in the
>> +                       // constructor
>> +                       // or the page is stateful+stale and a new
>> instances was created by pageprovider
>> +                       // we denote this by setting component to null
>> +                       component = null;
>> +               }
>> +
>> +               if ((component == null && !freshPage) || (component !=
>> null && component.getPage() != page))
>> +               {
>> +                       throw new ComponentNotFoundException("Component
>> '" + getComponentPath()
>> +                                       + "' has been removed from page.");
>> +               }
>> +
>> +               if (page instanceof Page)
>> +               {
>> +                       // initialize the page to be able to check whether
>> it is stateless
>> +                       ((Page)page).internalInitialize();
>> +               }
>> +
>> +               RedirectPolicy policy = page.isPageStateless()
>> +                       ? RedirectPolicy.NEVER_REDIRECT
>> +                       : RedirectPolicy.AUTO_REDIRECT;
>> +
>> +               boolean blockIfExpired = component != null && !component.
>> canCallListenerInterfaceAfterExpiry();
>> +
>> +               boolean lateComponent = component == null && freshPage;
>> +
>> +               if ((pageComponentProvider.wasExpired() &&
>> blockIfExpired) || lateComponent)
>> +               {
>> +                       // A request listener is invoked on an expired
>> page or the component couldn't be
>> +                       // determined. The best we can do is to re-paint
>> the newly constructed page.
>> +                       // Reference: WICKET-4454, WICKET-6288
>> +
>> +                       if (LOG.isDebugEnabled())
>> +                       {
>> +                               LOG.debug(
>> +                                       "An IRequestListener was called
>> but its page/component({}) couldn't be resolved. "
>> +                                               + "Scheduling re-create of
>> the page and ignoring the listener interface...",
>> +                                       getComponentPath());
>> +                       }
>> +
>> +                       if (isAjax)
>> +                       {
>> +                               policy = RedirectPolicy.ALWAYS_REDIRECT;
>> +                       }
>> +
>> +                       requestCycle.scheduleRequestHandlerAfterCurrent(new
>> RenderPageRequestHandler(
>> +                               new PageProvider(page), policy));
>> +                       return;
>> +               }
>> +
>> +               invokeListener(requestCycle, policy, isAjax);
>> +       }
>> +
>> +       private void invokeListener(IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax)
>> +       {
>> +               if (getBehaviorIndex() == null)
>> +               {
>> +                       invoke(requestCycle, policy, ajax, getComponent());
>> +               }
>> +               else
>> +               {
>> +                       try
>> +                       {
>> +                               Behavior behavior = getComponent().
>> getBehaviorById(behaviorId);
>> +                               invoke(requestCycle, policy, ajax,
>> getComponent(), behavior);
>> +                       }
>> +                       catch (IndexOutOfBoundsException e)
>> +                       {
>> +                               throw new WicketRuntimeException("Couldn't
>> find component behavior.", e);
>> +                       }
>> +
>> +               }
>> +       }
>> +
>> +       /**
>> +        * Invokes a given interface on a component.
>> +        *
>> +        * @param rcomponent
>> +        *            The component
>> +        *
>> +        * @throws ListenerInvocationNotAllowedException
>> +        *             when listener invocation attempted on a component
>> that does not allow it
>> +        */
>> +       private final void invoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final IRequestableComponent rcomponent)
>> +       {
>> +               // we are in Wicket core land
>> +               final Component component = (Component)rcomponent;
>> +
>> +               if (!component.canCallListenerInterface())
>> +               {
>> +                       // just return so that we have a silent fail and
>> just re-render the
>> +                       // page
>> +                       LOG.info("component not enabled or visible;
>> ignoring call. Component: " + component);
>> +                       throw new ListenerInvocationNotAllowedException(component,
>> null,
>> +                               "Component rejected interface invocation");
>> +               }
>> +
>> +               internalInvoke(requestCycle, policy, ajax, component,
>> component);
>> +       }
>> +
>> +       /**
>> +        * Invokes a given interface on a component's behavior.
>> +        *
>> +        * @param rcomponent
>> +        *            The component
>> +        * @param behavior
>> +        * @throws ListenerInvocationNotAllowedException
>> +        *             when listener invocation attempted on a component
>> that does not allow it
>> +        */
>> +       private final void invoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final IRequestableComponent
>> rcomponent, final Behavior behavior)
>> +       {
>> +               // we are in Wicket core land
>> +               final Component component = (Component)rcomponent;
>> +
>> +               if (!behavior.canCallListenerInterface(component))
>> +               {
>> +                       LOG.warn("behavior not enabled; ignore call.
>> Behavior {} at component {}", behavior,
>> +                               component);
>> +                       throw new ListenerInvocationNotAllowedException(component,
>> behavior,
>> +                               "Behavior rejected interface invocation.
>> ");
>> +               }
>> +
>> +               internalInvoke(requestCycle, policy, ajax, component,
>> behavior);
>> +       }
>> +
>> +       private void internalInvoke(final IRequestCycle requestCycle,
>> RedirectPolicy policy, boolean ajax, final Component component, final
>> Object target)
>> +       {
>> +               // save a reference to the page because the component can
>> be removed
>> +               // during the invocation of the listener and thus lose its
>> parent
>> +               Page page = component.getPage();
>> +
>> +               // initialization is required for stateless pages
>> +               if (!page.isInitialized())
>> +               {
>> +                       page.internalInitialize();
>> +               }
>> +
>> +               IRequestListener requestListener =
>> (IRequestListener)target;
>> +
>> +               if (requestListener.rendersPage() && !ajax)
>> +               {
>> +                       // schedule page render after current request
>> handler is done. this can be
>> +                       // overridden during invocation of listener
>> +                       // method (i.e. by calling
>> RequestCycle#setResponsePage)
>> +                       requestCycle.scheduleRequestHandlerAfterCurrent(new
>> RenderPageRequestHandler(
>> +                               new PageProvider(page), policy));
>> +               }
>> +
>> +               requestListener.onRequest();
>> +       }
>> +
>> +       @Override
>> +       public final boolean isPageInstanceCreated()
>> +       {
>> +               return pageComponentProvider.hasPageInstance();
>> +       }
>> +
>> +       @Override
>> +       public final String getComponentPath()
>> +       {
>> +               return pageComponentProvider.getComponentPath();
>> +       }
>> +
>> +       @Override
>> +       public final Integer getRenderCount()
>> +       {
>> +               return pageComponentProvider.getRenderCount();
>> +       }
>> +
>> +       @Override
>> +       public ListenerLogData getLogData()
>> +       {
>> +               return logData;
>> +       }
>> +}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerInterfaceLogData.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerInterfaceLogData.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/logger/
>> ListenerInterfaceLogData.java
>> deleted file mode 100644
>> index 5ed97a7..0000000
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerInterfaceLogData.java
>> +++ /dev/null
>> @@ -1,214 +0,0 @@
>> -/*
>> - * Licensed to the Apache Software Foundation (ASF) under one or more
>> - * contributor license agreements.  See the NOTICE file distributed with
>> - * this work for additional information regarding copyright ownership.
>> - * The ASF licenses this file to You under the Apache License, Version 2.0
>> - * (the "License"); you may not use this file except in compliance with
>> - * the License.  You may obtain a copy of the License at
>> - *
>> - *      http://www.apache.org/licenses/LICENSE-2.0
>> - *
>> - * Unless required by applicable law or agreed to in writing, software
>> - * distributed under the License is distributed on an "AS IS" BASIS,
>> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> - * See the License for the specific language governing permissions and
>> - * limitations under the License.
>> - */
>> -package org.apache.wicket.core.request.handler.logger;
>> -
>> -import org.apache.wicket.Component;
>> -import org.apache.wicket.behavior.Behavior;
>> -import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
>> -import org.apache.wicket.markup.html.form.Form;
>> -import org.apache.wicket.markup.html.form.IFormSubmitter;
>> -import org.apache.wicket.request.component.IRequestableComponent;
>> -
>> -/**
>> - * Contains logging data for component/listener-interface request
>> handlers.
>> - *
>> - * @author Emond Papegaaij
>> - */
>> -public class ListenerInterfaceLogData extends PageLogData
>> -{
>> -       private static final long serialVersionUID = 1L;
>> -
>> -       private final Class<? extends IRequestableComponent>
>> componentClass;
>> -       private final String componentPath;
>> -       private final Integer behaviorIndex;
>> -       private Class<? extends Behavior> behaviorClass;
>> -       private Class<? extends IRequestableComponent>
>> submittingComponentClass;
>> -       private String submittingComponentPath;
>> -
>> -       /**
>> -        * Construct.
>> -        *
>> -        * @param pageAndComponentProvider
>> -        * @param listenerInterface
>> -        * @param behaviorIndex
>> -        */
>> -       public ListenerInterfaceLogData(IPageAndComponentProvider
>> pageAndComponentProvider, Integer behaviorIndex)
>> -       {
>> -               super(pageAndComponentProvider);
>> -               componentClass = tryToGetComponentClass(
>> pageAndComponentProvider);
>> -               componentPath = tryToGetComponentPath(
>> pageAndComponentProvider);
>> -               this.behaviorIndex = behaviorIndex;
>> -               if (behaviorIndex != null && componentClass != null)
>> -               {
>> -                       try
>> -                       {
>> -                               behaviorClass = pageAndComponentProvider.
>> getComponent()
>> -                                       .getBehaviorById(behaviorIndex)
>> -                                       .getClass();
>> -                       }
>> -                       catch (Exception ignore)
>> -                       {
>> -                               behaviorClass = null;
>> -                       }
>> -               }
>> -               else
>> -               {
>> -                       behaviorClass = null;
>> -               }
>> -
>> -               final Component formSubmitter =
>> tryToGetFormSubmittingComponent(pageAndComponentProvider);
>> -               if (formSubmitter != null)
>> -               {
>> -                       submittingComponentClass =
>> formSubmitter.getClass();
>> -                       submittingComponentPath = formSubmitter.
>> getPageRelativePath();
>> -               }
>> -       }
>> -
>> -       private static Class<? extends IRequestableComponent>
>> tryToGetComponentClass(
>> -               IPageAndComponentProvider pageAndComponentProvider)
>> -       {
>> -               try
>> -               {
>> -                       return pageAndComponentProvider.
>> getComponent().getClass();
>> -               }
>> -               catch (Exception e)
>> -               {
>> -                       // getComponent might fail if the page does not
>> exist (ie session timeout)
>> -                       return null;
>> -               }
>> -       }
>> -
>> -
>> -       private static String tryToGetComponentPath(IPageAndComponentProvider
>> pageAndComponentProvider)
>> -       {
>> -               try
>> -               {
>> -                       return pageAndComponentProvider.
>> getComponentPath();
>> -               }
>> -               catch (Exception e)
>> -               {
>> -                       // getComponentPath might fail if the page does
>> not exist (ie session timeout)
>> -                       return null;
>> -               }
>> -       }
>> -
>> -       private static Component tryToGetFormSubmittingComponent(
>> -               IPageAndComponentProvider pageAndComponentProvider)
>> -       {
>> -               try
>> -               {
>> -                       final IRequestableComponent component =
>> pageAndComponentProvider.getComponent();
>> -                       if (component instanceof Form)
>> -                       {
>> -                               final IFormSubmitter submitter =
>> ((Form<?>)component).findSubmittingButton();
>> -                               return submitter instanceof Component ?
>> (Component)submitter : null;
>> -                       }
>> -                       return null;
>> -               }
>> -               catch (Exception e)
>> -               {
>> -                       // getComponent might fail if the page does not
>> exist (ie session timeout)
>> -                       return null;
>> -               }
>> -       }
>> -
>> -       /**
>> -        * @return componentClass
>> -        */
>> -       public final Class<? extends IRequestableComponent>
>> getComponentClass()
>> -       {
>> -               return componentClass;
>> -       }
>> -
>> -       /**
>> -        * @return componentPath
>> -        */
>> -       public final String getComponentPath()
>> -       {
>> -               return componentPath;
>> -       }
>> -
>> -       /**
>> -        * @return behaviorIndex
>> -        */
>> -       public final Integer getBehaviorIndex()
>> -       {
>> -               return behaviorIndex;
>> -       }
>> -
>> -       /**
>> -        * @return behaviorClass
>> -        */
>> -       public final Class<? extends Behavior> getBehaviorClass()
>> -       {
>> -               return behaviorClass;
>> -       }
>> -
>> -       /**
>> -        * @return submittingComponentClass
>> -        */
>> -       public Class<? extends IRequestableComponent>
>> getSubmittingComponentClass()
>> -       {
>> -               return submittingComponentClass;
>> -       }
>> -
>> -       /**
>> -        * @return submittingComponentPath
>> -        */
>> -       public String getSubmittingComponentPath()
>> -       {
>> -               return submittingComponentPath;
>> -       }
>> -
>> -       @Override
>> -       public String toString()
>> -       {
>> -               StringBuilder sb = new StringBuilder(super.toString());
>> -               sb.setCharAt(sb.length() - 1, ',');
>> -               if (getComponentClass() != null)
>> -               {
>> -                       sb.append("componentClass=");
>> -                       sb.append(getComponentClass().getName());
>> -                       sb.append(',');
>> -               }
>> -               if (getComponentPath() != null)
>> -               {
>> -                       sb.append("componentPath=");
>> -                       sb.append(getComponentPath());
>> -                       sb.append(',');
>> -               }
>> -               sb.append("behaviorIndex=");
>> -               sb.append(getBehaviorIndex());
>> -               if (getBehaviorClass() != null)
>> -               {
>> -                       sb.append(",behaviorClass=");
>> -                       sb.append(getBehaviorClass().getName());
>> -               }
>> -               if (getSubmittingComponentClass() != null)
>> -               {
>> -                       sb.append(",submittingComponentClass=");
>> -                       sb.append(getSubmittingComponentClass().
>> getName());
>> -               }
>> -               if (getSubmittingComponentPath() != null)
>> -               {
>> -                       sb.append(",submittingComponentPath=");
>> -                       sb.append(getSubmittingComponentPath());
>> -               }
>> -               sb.append("}");
>> -               return sb.toString();
>> -       }
>> -}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerLogData.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerLogData.java b/wicket-core/src/main/java/
>> org/apache/wicket/core/request/handler/logger/ListenerLogData.java
>> new file mode 100644
>> index 0000000..d06fe69
>> --- /dev/null
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/
>> request/handler/logger/ListenerLogData.java
>> @@ -0,0 +1,214 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.wicket.core.request.handler.logger;
>> +
>> +import org.apache.wicket.Component;
>> +import org.apache.wicket.behavior.Behavior;
>> +import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
>> +import org.apache.wicket.markup.html.form.Form;
>> +import org.apache.wicket.markup.html.form.IFormSubmitter;
>> +import org.apache.wicket.request.component.IRequestableComponent;
>> +
>> +/**
>> + * Contains logging data for component/listener-interface request
>> handlers.
>> + *
>> + * @author Emond Papegaaij
>> + */
>> +public class ListenerLogData extends PageLogData
>> +{
>> +       private static final long serialVersionUID = 1L;
>> +
>> +       private final Class<? extends IRequestableComponent>
>> componentClass;
>> +       private final String componentPath;
>> +       private final Integer behaviorIndex;
>> +       private Class<? extends Behavior> behaviorClass;
>> +       private Class<? extends IRequestableComponent>
>> submittingComponentClass;
>> +       private String submittingComponentPath;
>> +
>> +       /**
>> +        * Construct.
>> +        *
>> +        * @param pageAndComponentProvider
>> +        * @param listenerInterface
>> +        * @param behaviorIndex
>> +        */
>> +       public ListenerLogData(IPageAndComponentProvider
>> pageAndComponentProvider, Integer behaviorIndex)
>> +       {
>> +               super(pageAndComponentProvider);
>> +               componentClass = tryToGetComponentClass(
>> pageAndComponentProvider);
>> +               componentPath = tryToGetComponentPath(
>> pageAndComponentProvider);
>> +               this.behaviorIndex = behaviorIndex;
>> +               if (behaviorIndex != null && componentClass != null)
>> +               {
>> +                       try
>> +                       {
>> +                               behaviorClass = pageAndComponentProvider.
>> getComponent()
>> +                                       .getBehaviorById(behaviorIndex)
>> +                                       .getClass();
>> +                       }
>> +                       catch (Exception ignore)
>> +                       {
>> +                               behaviorClass = null;
>> +                       }
>> +               }
>> +               else
>> +               {
>> +                       behaviorClass = null;
>> +               }
>> +
>> +               final Component formSubmitter =
>> tryToGetFormSubmittingComponent(pageAndComponentProvider);
>> +               if (formSubmitter != null)
>> +               {
>> +                       submittingComponentClass =
>> formSubmitter.getClass();
>> +                       submittingComponentPath = formSubmitter.
>> getPageRelativePath();
>> +               }
>> +       }
>> +
>> +       private static Class<? extends IRequestableComponent>
>> tryToGetComponentClass(
>> +               IPageAndComponentProvider pageAndComponentProvider)
>> +       {
>> +               try
>> +               {
>> +                       return pageAndComponentProvider.
>> getComponent().getClass();
>> +               }
>> +               catch (Exception e)
>> +               {
>> +                       // getComponent might fail if the page does not
>> exist (ie session timeout)
>> +                       return null;
>> +               }
>> +       }
>> +
>> +
>> +       private static String tryToGetComponentPath(IPageAndComponentProvider
>> pageAndComponentProvider)
>> +       {
>> +               try
>> +               {
>> +                       return pageAndComponentProvider.
>> getComponentPath();
>> +               }
>> +               catch (Exception e)
>> +               {
>> +                       // getComponentPath might fail if the page does
>> not exist (ie session timeout)
>> +                       return null;
>> +               }
>> +       }
>> +
>> +       private static Component tryToGetFormSubmittingComponent(
>> +               IPageAndComponentProvider pageAndComponentProvider)
>> +       {
>> +               try
>> +               {
>> +                       final IRequestableComponent component =
>> pageAndComponentProvider.getComponent();
>> +                       if (component instanceof Form)
>> +                       {
>> +                               final IFormSubmitter submitter =
>> ((Form<?>)component).findSubmittingButton();
>> +                               return submitter instanceof Component ?
>> (Component)submitter : null;
>> +                       }
>> +                       return null;
>> +               }
>> +               catch (Exception e)
>> +               {
>> +                       // getComponent might fail if the page does not
>> exist (ie session timeout)
>> +                       return null;
>> +               }
>> +       }
>> +
>> +       /**
>> +        * @return componentClass
>> +        */
>> +       public final Class<? extends IRequestableComponent>
>> getComponentClass()
>> +       {
>> +               return componentClass;
>> +       }
>> +
>> +       /**
>> +        * @return componentPath
>> +        */
>> +       public final String getComponentPath()
>> +       {
>> +               return componentPath;
>> +       }
>> +
>> +       /**
>> +        * @return behaviorIndex
>> +        */
>> +       public final Integer getBehaviorIndex()
>> +       {
>> +               return behaviorIndex;
>> +       }
>> +
>> +       /**
>> +        * @return behaviorClass
>> +        */
>> +       public final Class<? extends Behavior> getBehaviorClass()
>> +       {
>> +               return behaviorClass;
>> +       }
>> +
>> +       /**
>> +        * @return submittingComponentClass
>> +        */
>> +       public Class<? extends IRequestableComponent>
>> getSubmittingComponentClass()
>> +       {
>> +               return submittingComponentClass;
>> +       }
>> +
>> +       /**
>> +        * @return submittingComponentPath
>> +        */
>> +       public String getSubmittingComponentPath()
>> +       {
>> +               return submittingComponentPath;
>> +       }
>> +
>> +       @Override
>> +       public String toString()
>> +       {
>> +               StringBuilder sb = new StringBuilder(super.toString());
>> +               sb.setCharAt(sb.length() - 1, ',');
>> +               if (getComponentClass() != null)
>> +               {
>> +                       sb.append("componentClass=");
>> +                       sb.append(getComponentClass().getName());
>> +                       sb.append(',');
>> +               }
>> +               if (getComponentPath() != null)
>> +               {
>> +                       sb.append("componentPath=");
>> +                       sb.append(getComponentPath());
>> +                       sb.append(',');
>> +               }
>> +               sb.append("behaviorIndex=");
>> +               sb.append(getBehaviorIndex());
>> +               if (getBehaviorClass() != null)
>> +               {
>> +                       sb.append(",behaviorClass=");
>> +                       sb.append(getBehaviorClass().getName());
>> +               }
>> +               if (getSubmittingComponentClass() != null)
>> +               {
>> +                       sb.append(",submittingComponentClass=");
>> +                       sb.append(getSubmittingComponentClass().
>> getName());
>> +               }
>> +               if (getSubmittingComponentPath() != null)
>> +               {
>> +                       sb.append(",submittingComponentPath=");
>> +                       sb.append(getSubmittingComponentPath());
>> +               }
>> +               sb.append("}");
>> +               return sb.toString();
>> +       }
>> +}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> AbstractBookmarkableMapper.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/AbstractBookmarkableMapper.java
>> b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> AbstractBookmarkableMapper.java
>> index cb372d8..ecb50a2 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> AbstractBookmarkableMapper.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> AbstractBookmarkableMapper.java
>> @@ -23,7 +23,7 @@ import org.apache.wicket.IRequestListener;
>>   import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceRequestHandler;
>>   import org.apache.wicket.core.request.handler.
>> BookmarkablePageRequestHandler;
>>   import org.apache.wicket.core.request.handler.IPageRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -304,7 +304,7 @@ public abstract class AbstractBookmarkableMapper
>> extends AbstractComponentMapper
>>
>>                  checkExpiration(provider, pageInfo);
>>
>> -               return new ListenerInterfaceRequestHandler(provider,
>> componentInfo.getBehaviorId());
>> +               return new ListenerRequestHandler(provider,
>> componentInfo.getBehaviorId());
>>          }
>>
>>          private void checkExpiration(PageProvider provider, PageInfo
>> pageInfo)
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/MountedMapper.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/MountedMapper.java b/wicket-core/src/main/java/
>> org/apache/wicket/core/request/mapper/MountedMapper.java
>> index 1b6aa28..f9edf11 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/MountedMapper.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/MountedMapper.java
>> @@ -18,7 +18,7 @@ package org.apache.wicket.core.request.mapper;
>>
>>   import java.util.function.Supplier;
>>
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.request.IRequestHandler;
>>   import org.apache.wicket.request.Request;
>>   import org.apache.wicket.request.Url;
>> @@ -158,10 +158,10 @@ public class MountedMapper extends
>> AbstractBookmarkableMapper
>>          {
>>                  Url url = super.mapHandler(requestHandler);
>>
>> -               if (url == null && requestHandler instanceof
>> ListenerInterfaceRequestHandler &&
>> +               if (url == null && requestHandler instanceof
>> ListenerRequestHandler &&
>>                          getRecreateMountedPagesAfterExpiry())
>>                  {
>> -                       ListenerInterfaceRequestHandler handler = (
>> ListenerInterfaceRequestHandler)requestHandler;
>> +                       ListenerRequestHandler handler =
>> (ListenerRequestHandler)requestHandler;
>>                          IRequestablePage page = handler.getPage();
>>                          if (checkPageInstance(page))
>>                          {
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapper.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/core/
>> request/mapper/PageInstanceMapper.java b/wicket-core/src/main/java/
>> org/apache/wicket/core/request/mapper/PageInstanceMapper.java
>> index e983131..f90ea87 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapper.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapper.java
>> @@ -16,7 +16,7 @@
>>    */
>>   package org.apache.wicket.core.request.mapper;
>>
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -85,7 +85,7 @@ public class PageInstanceMapper extends
>> AbstractComponentMapper
>>
>>                                          provider.setPageSource(
>> getContext());
>>
>> -                                       return new
>> ListenerInterfaceRequestHandler(provider, componentInfo.getBehaviorId());
>> +                                       return new ListenerRequestHandler(provider,
>> componentInfo.getBehaviorId());
>>                                  }
>>                          }
>>                  }
>> @@ -107,9 +107,9 @@ public class PageInstanceMapper extends
>> AbstractComponentMapper
>>                          PageInfo i = new PageInfo(page.getPageId());
>>                          info = new PageComponentInfo(i, null);
>>                  }
>> -               else if (requestHandler instanceof
>> ListenerInterfaceRequestHandler)
>> +               else if (requestHandler instanceof ListenerRequestHandler)
>>                  {
>> -                       ListenerInterfaceRequestHandler handler = (
>> ListenerInterfaceRequestHandler)requestHandler;
>> +                       ListenerRequestHandler handler =
>> (ListenerRequestHandler)requestHandler;
>>                          IRequestablePage page = handler.getPage();
>>                          String componentPath = handler.getComponentPath();
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/main/java/org/apache/wicket/util/
>> tester/BaseWicketTester.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
>> b/wicket-core/src/main/java/org/apache/wicket/util/tester/
>> BaseWicketTester.java
>> index b5a15ec..0b30c92 100644
>> --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/
>> BaseWicketTester.java
>> +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/
>> BaseWicketTester.java
>> @@ -62,7 +62,7 @@ import org.apache.wicket.ajax.markup.
>> html.form.AjaxSubmitLink;
>>   import org.apache.wicket.behavior.AbstractAjaxBehavior;
>>   import org.apache.wicket.core.request.handler.
>> BookmarkablePageRequestHandler;
>>   import org.apache.wicket.core.request.handler.IPageProvider;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -1093,7 +1093,7 @@ public class BaseWicketTester
>>
>>                  // there are two ways to do this. RequestCycle could be
>> forced to call the handler
>>                  // directly but constructing and parsing the URL increases
>> the chance of triggering bugs
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(new PageAndComponentProvider(
>> +               IRequestHandler handler = new ListenerRequestHandler(new
>> PageAndComponentProvider(
>>                          component.getPage(), component));
>>
>>                  Url url = urlFor(handler);
>> @@ -1119,7 +1119,7 @@ public class BaseWicketTester
>>
>>                  // there are two ways to do this. RequestCycle could be
>> forced to call the handler
>>                  // directly but constructing and parsing the URL increases
>> the chance of triggering bugs
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(new PageAndComponentProvider(
>> +               IRequestHandler handler = new ListenerRequestHandler(new
>> PageAndComponentProvider(
>>                          component.getPage(), component));
>>
>>                  processRequest(handler);
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/
>> BehaviorRequestTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
>> b/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
>> index 909ee23..1e5227c 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/BehaviorRequestTest.java
>> @@ -18,7 +18,7 @@ package org.apache.wicket;
>>
>>   import org.apache.wicket.behavior.Behavior;
>>   import org.apache.wicket.core.request.handler.IPageAndComponentProvider;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.
>> ListenerInvocationNotAllowedException;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.markup.ComponentTag;
>> @@ -83,7 +83,7 @@ public class BehaviorRequestTest extends WicketTestCase
>>                  final int index = page.container.getBehaviorId(
>> behaviorUnderTest);
>>                  final IPageAndComponentProvider provider = new
>> PageAndComponentProvider(page,
>>                          page.container);
>> -               final IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider, index);
>> +               final IRequestHandler handler = new ListenerRequestHandler(provider,
>> index);
>>
>>                  return tester.urlFor(handler).toString();
>>          }
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/
>> ComponentWithLazyModelCreationTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/
>> ComponentWithLazyModelCreationTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/ComponentWithLazyModelCreationTest.java
>> index 59cd19e..9361351 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/
>> ComponentWithLazyModelCreationTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/
>> ComponentWithLazyModelCreationTest.java
>> @@ -17,7 +17,7 @@
>>   package org.apache.wicket;
>>
>>   import org.apache.wicket.behavior.Behavior;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.markup.ComponentTag;
>>   import org.apache.wicket.markup.IMarkupResourceStreamProvider;
>> @@ -120,7 +120,7 @@ public class ComponentWithLazyModelCreationTest
>> extends WicketTestCase
>>                  {
>>                          super.onComponentTag(component, tag);
>>                          int index = component.getBehaviorId(this);
>> -                       IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(
>> +                       IRequestHandler handler = new
>> ListenerRequestHandler(
>>                                  new PageAndComponentProvider(component.getPage(),
>> component), index);
>>                          statefullUrl = component.getRequestCycle().
>> mapUrlFor(handler).toString();
>>                  }
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandlerTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/handler/ListenerInterfaceRequestHandlerTest.java
>> b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandlerTest.java
>> deleted file mode 100644
>> index d1c0592..0000000
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerInterfaceRequestHandlerTest.java
>> +++ /dev/null
>> @@ -1,208 +0,0 @@
>> -/*
>> - * Licensed to the Apache Software Foundation (ASF) under one or more
>> - * contributor license agreements.  See the NOTICE file distributed with
>> - * this work for additional information regarding copyright ownership.
>> - * The ASF licenses this file to You under the Apache License, Version 2.0
>> - * (the "License"); you may not use this file except in compliance with
>> - * the License.  You may obtain a copy of the License at
>> - *
>> - *      http://www.apache.org/licenses/LICENSE-2.0
>> - *
>> - * Unless required by applicable law or agreed to in writing, software
>> - * distributed under the License is distributed on an "AS IS" BASIS,
>> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> - * See the License for the specific language governing permissions and
>> - * limitations under the License.
>> - */
>> -package org.apache.wicket.core.request.handler;
>> -
>> -import static org.hamcrest.Matchers.is;
>> -
>> -import java.io.IOException;
>> -import java.text.ParseException;
>> -
>> -import org.apache.wicket.MarkupContainer;
>> -import org.apache.wicket.Page;
>> -import org.apache.wicket.Session;
>> -import org.apache.wicket.WicketRuntimeException;
>> -import org.apache.wicket.ajax.AjaxRequestTarget;
>> -import org.apache.wicket.ajax.markup.html.AjaxLink;
>> -import org.apache.wicket.core.request.mapper.MountedMapper;
>> -import org.apache.wicket.markup.IMarkupFragment;
>> -import org.apache.wicket.markup.IMarkupResourceStreamProvider;
>> -import org.apache.wicket.markup.Markup;
>> -import org.apache.wicket.markup.html.WebPage;
>> -import org.apache.wicket.markup.html.link.Link;
>> -import org.apache.wicket.markup.html.link.StatelessLink;
>> -import org.apache.wicket.request.Url;
>> -import org.apache.wicket.request.mapper.parameter.PageParameters;
>> -import org.apache.wicket.resource.DummyPage;
>> -import org.apache.wicket.util.resource.IResourceStream;
>> -import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
>> -import org.apache.wicket.util.resource.StringResourceStream;
>> -import org.apache.wicket.util.tester.WicketTestCase;
>> -import org.junit.Test;
>> -
>> -/**
>> - * Tests for {@link ListenerInterfaceRequestHandler}
>> - */
>> -public class ListenerInterfaceRequestHandlerTest extends WicketTestCase
>> -{
>> -
>> -       /**
>> -        * WICKET-5466
>> -        */
>> -       @Test
>> -       public void removedComponent()
>> -       {
>> -               // non-existing component on fresh page is ignored
>> -               PageAndComponentProvider freshPage = new
>> PageAndComponentProvider(DummyPage.class, null,
>> -                       "foo");
>> -               new ListenerInterfaceRequestHandle
>> r(freshPage).respond(tester
>> -                       .getRequestCycle());
>> -
>> -               // non-existing component on old page fails
>> -               PageAndComponentProvider oldPage = new
>> PageAndComponentProvider(new DummyPage(), "foo");
>> -               try
>> -               {
>> -                       new ListenerInterfaceRequestHandler(oldPage)
>> -                               .respond(tester.getRequestCycle());
>> -                       fail();
>> -               }
>> -               catch (WicketRuntimeException ex)
>> -               {
>> -                       assertEquals("Component 'foo' has been removed
>> from page.", ex.getMessage());
>> -               }
>> -       }
>> -
>> -       /**
>> -        * https://issues.apache.org/jira/browse/WICKET-4116
>> -        *
>> -        * @throws Exception
>> -        */
>> -       @Test
>> -       public void recreateThePageWhenListenereIn
>> terfaceIsExecutedOnExpiredPage() throws Exception
>> -       {
>> -               tester.getApplication().mountPage("ajaxLink",
>> AjaxLinkExpirePage.class);
>> -               AjaxLinkExpirePage page = tester.startPage(
>> AjaxLinkExpirePage.class);
>> -
>> -               int initialPageId = page.getPageId();
>> -
>> -               Url urlToAjaxLink = tester.urlFor(page.link);
>> -               Session session = tester.getSession();
>> -               session.clear();
>> -
>> -               // fire a request to the ajax link on the expired page
>> -               executeAjaxUrlWithLastBaseUrl(urlToAjaxLink);
>> -
>> -               Page lastRenderedPage = tester.getLastRenderedPage();
>> -               int lastRenderedPageId = lastRenderedPage.getPageId();
>> -               assertTrue("A new page must be create ",
>> lastRenderedPageId > initialPageId);
>> -       }
>> -
>> -       private void executeAjaxUrlWithLastBaseUrl(Url url) throws
>> IOException,
>> -               ResourceStreamNotFoundException, ParseException
>> -       {
>> -               tester.getRequest().setUrl(url);
>> -               tester.getRequest().addHeader("Wicket-Ajax-BaseURL",
>> -                       tester.getWicketAjaxBaseUrlEncodedInL
>> astResponse());
>> -               tester.getRequest().addHeader("Wicket-Ajax", "true");
>> -               tester.processRequest();
>> -       }
>> -
>> -       /**
>> -        * Test page for #recreateThePageWhenListenereIn
>> terfaceIsExecutedOnExpiredPage()
>> -        */
>> -       public static class AjaxLinkExpirePage extends WebPage implements
>> IMarkupResourceStreamProvider
>> -       {
>> -               private static final long serialVersionUID = 1L;
>> -
>> -               private AjaxLink<Void> link;
>> -
>> -               /**
>> -                * Constructor.
>> -                */
>> -               public AjaxLinkExpirePage()
>> -               {
>> -                       add(link = new AjaxLink<Void>("test")
>> -                       {
>> -                               private static final long serialVersionUID
>> = 1L;
>> -
>> -                               @Override
>> -                               public void onClick(AjaxRequestTarget
>> target)
>> -                               {
>> -                                       System.err.println("clicked");
>> -                               }
>> -                       });
>> -               }
>> -
>> -               @Override
>> -               public IResourceStream getMarkupResourceStream(MarkupContainer
>> container,
>> -                       Class<?> containerClass)
>> -               {
>> -
>> -                       return new StringResourceStream(
>> -                               "<html><body><a wicket:id='test'>Link</a></
>> body></html>");
>> -               }
>> -
>> -       }
>> -
>> -       /**
>> -        * Testcase for WICKET-4185
>> -        */
>> -       @Test
>> -       public void isPageInstanceCreatedOnClassLinks()
>> -       {
>> -               PageAndComponentProvider provider = new
>> PageAndComponentProvider(Page.class, "link");
>> -               ListenerInterfaceRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider);
>> -               assertFalse("Handler should not report a page instance is
>> available ",
>> -                       handler.isPageInstanceCreated());
>> -       }
>> -
>> -       @Test
>> -       public void skipListenerIfExpiredPage()
>> -       {
>> -               tester.getApplication().getRootRequestMapperAsCompound()
>> .add(new MountedMapper("/segment", NotExpiredPage.class));
>> -               tester.startPage(NotExpiredPage.class);
>> -               tester.clickLink("statelessLink");
>> -               NotExpiredPage page = (NotExpiredPage)tester.
>> getLastRenderedPage();
>> -               assertThat(page.invoked, is(true));
>> -       }
>> -
>> -       public static class NotExpiredPage extends WebPage
>> -       {
>> -               public boolean invoked;
>> -
>> -               public NotExpiredPage(PageParameters pageParameters)
>> -               {
>> -                       super(pageParameters);
>> -                       add(new StatelessLink<Object>("statelessLink")
>> -                       {
>> -                               public void onClick()
>> -                               {
>> -                                       invoked = true;
>> -                               }
>> -                       });
>> -                       add(new Link<Object>("statefullLink")
>> -                       {
>> -                               public void onClick()
>> -                               {
>> -                               }
>> -                       });
>> -               }
>> -
>> -               @Override
>> -               public IMarkupFragment getMarkup()
>> -               {
>> -                       return Markup.of(
>> -                               "<html><body><a
>> wicket:id=\"statelessLink\"></a><a wicket:id=\"statefullLink\"></
>> a></body></html>");
>> -               }
>> -
>> -               @Override
>> -               protected void onBeforeRender()
>> -               {
>> -                       get("statefullLink").setVisible(false);
>> -                       super.onBeforeRender();
>> -               }
>> -       }
>> -}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerRequestHandlerTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/handler/ListenerRequestHandlerTest.java
>> b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerRequestHandlerTest.java
>> new file mode 100644
>> index 0000000..b212c9c
>> --- /dev/null
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/handler/
>> ListenerRequestHandlerTest.java
>> @@ -0,0 +1,208 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License, Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + *      http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.wicket.core.request.handler;
>> +
>> +import static org.hamcrest.Matchers.is;
>> +
>> +import java.io.IOException;
>> +import java.text.ParseException;
>> +
>> +import org.apache.wicket.MarkupContainer;
>> +import org.apache.wicket.Page;
>> +import org.apache.wicket.Session;
>> +import org.apache.wicket.WicketRuntimeException;
>> +import org.apache.wicket.ajax.AjaxRequestTarget;
>> +import org.apache.wicket.ajax.markup.html.AjaxLink;
>> +import org.apache.wicket.core.request.mapper.MountedMapper;
>> +import org.apache.wicket.markup.IMarkupFragment;
>> +import org.apache.wicket.markup.IMarkupResourceStreamProvider;
>> +import org.apache.wicket.markup.Markup;
>> +import org.apache.wicket.markup.html.WebPage;
>> +import org.apache.wicket.markup.html.link.Link;
>> +import org.apache.wicket.markup.html.link.StatelessLink;
>> +import org.apache.wicket.request.Url;
>> +import org.apache.wicket.request.mapper.parameter.PageParameters;
>> +import org.apache.wicket.resource.DummyPage;
>> +import org.apache.wicket.util.resource.IResourceStream;
>> +import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
>> +import org.apache.wicket.util.resource.StringResourceStream;
>> +import org.apache.wicket.util.tester.WicketTestCase;
>> +import org.junit.Test;
>> +
>> +/**
>> + * Tests for {@link ListenerRequestHandler}
>> + */
>> +public class ListenerRequestHandlerTest extends WicketTestCase
>> +{
>> +
>> +       /**
>> +        * WICKET-5466
>> +        */
>> +       @Test
>> +       public void removedComponent()
>> +       {
>> +               // non-existing component on fresh page is ignored
>> +               PageAndComponentProvider freshPage = new
>> PageAndComponentProvider(DummyPage.class, null,
>> +                       "foo");
>> +               new ListenerRequestHandler(freshPage).respond(tester
>> +                       .getRequestCycle());
>> +
>> +               // non-existing component on old page fails
>> +               PageAndComponentProvider oldPage = new
>> PageAndComponentProvider(new DummyPage(), "foo");
>> +               try
>> +               {
>> +                       new ListenerRequestHandler(oldPage)
>> +                               .respond(tester.getRequestCycle());
>> +                       fail();
>> +               }
>> +               catch (WicketRuntimeException ex)
>> +               {
>> +                       assertEquals("Component 'foo' has been removed
>> from page.", ex.getMessage());
>> +               }
>> +       }
>> +
>> +       /**
>> +        * https://issues.apache.org/jira/browse/WICKET-4116
>> +        *
>> +        * @throws Exception
>> +        */
>> +       @Test
>> +       public void recreateThePageWhenListenereIn
>> terfaceIsExecutedOnExpiredPage() throws Exception
>> +       {
>> +               tester.getApplication().mountPage("ajaxLink",
>> AjaxLinkExpirePage.class);
>> +               AjaxLinkExpirePage page = tester.startPage(
>> AjaxLinkExpirePage.class);
>> +
>> +               int initialPageId = page.getPageId();
>> +
>> +               Url urlToAjaxLink = tester.urlFor(page.link);
>> +               Session session = tester.getSession();
>> +               session.clear();
>> +
>> +               // fire a request to the ajax link on the expired page
>> +               executeAjaxUrlWithLastBaseUrl(urlToAjaxLink);
>> +
>> +               Page lastRenderedPage = tester.getLastRenderedPage();
>> +               int lastRenderedPageId = lastRenderedPage.getPageId();
>> +               assertTrue("A new page must be create ",
>> lastRenderedPageId > initialPageId);
>> +       }
>> +
>> +       private void executeAjaxUrlWithLastBaseUrl(Url url) throws
>> IOException,
>> +               ResourceStreamNotFoundException, ParseException
>> +       {
>> +               tester.getRequest().setUrl(url);
>> +               tester.getRequest().addHeader("Wicket-Ajax-BaseURL",
>> +                       tester.getWicketAjaxBaseUrlEncodedInL
>> astResponse());
>> +               tester.getRequest().addHeader("Wicket-Ajax", "true");
>> +               tester.processRequest();
>> +       }
>> +
>> +       /**
>> +        * Test page for #recreateThePageWhenListenereIn
>> terfaceIsExecutedOnExpiredPage()
>> +        */
>> +       public static class AjaxLinkExpirePage extends WebPage implements
>> IMarkupResourceStreamProvider
>> +       {
>> +               private static final long serialVersionUID = 1L;
>> +
>> +               private AjaxLink<Void> link;
>> +
>> +               /**
>> +                * Constructor.
>> +                */
>> +               public AjaxLinkExpirePage()
>> +               {
>> +                       add(link = new AjaxLink<Void>("test")
>> +                       {
>> +                               private static final long serialVersionUID
>> = 1L;
>> +
>> +                               @Override
>> +                               public void onClick(AjaxRequestTarget
>> target)
>> +                               {
>> +                                       System.err.println("clicked");
>> +                               }
>> +                       });
>> +               }
>> +
>> +               @Override
>> +               public IResourceStream getMarkupResourceStream(MarkupContainer
>> container,
>> +                       Class<?> containerClass)
>> +               {
>> +
>> +                       return new StringResourceStream(
>> +                               "<html><body><a wicket:id='test'>Link</a></
>> body></html>");
>> +               }
>> +
>> +       }
>> +
>> +       /**
>> +        * Testcase for WICKET-4185
>> +        */
>> +       @Test
>> +       public void isPageInstanceCreatedOnClassLinks()
>> +       {
>> +               PageAndComponentProvider provider = new
>> PageAndComponentProvider(Page.class, "link");
>> +               ListenerRequestHandler handler = new
>> ListenerRequestHandler(provider);
>> +               assertFalse("Handler should not report a page instance is
>> available ",
>> +                       handler.isPageInstanceCreated());
>> +       }
>> +
>> +       @Test
>> +       public void skipListenerIfExpiredPage()
>> +       {
>> +               tester.getApplication().getRootRequestMapperAsCompound()
>> .add(new MountedMapper("/segment", NotExpiredPage.class));
>> +               tester.startPage(NotExpiredPage.class);
>> +               tester.clickLink("statelessLink");
>> +               NotExpiredPage page = (NotExpiredPage)tester.
>> getLastRenderedPage();
>> +               assertThat(page.invoked, is(true));
>> +       }
>> +
>> +       public static class NotExpiredPage extends WebPage
>> +       {
>> +               public boolean invoked;
>> +
>> +               public NotExpiredPage(PageParameters pageParameters)
>> +               {
>> +                       super(pageParameters);
>> +                       add(new StatelessLink<Object>("statelessLink")
>> +                       {
>> +                               public void onClick()
>> +                               {
>> +                                       invoked = true;
>> +                               }
>> +                       });
>> +                       add(new Link<Object>("statefullLink")
>> +                       {
>> +                               public void onClick()
>> +                               {
>> +                               }
>> +                       });
>> +               }
>> +
>> +               @Override
>> +               public IMarkupFragment getMarkup()
>> +               {
>> +                       return Markup.of(
>> +                               "<html><body><a
>> wicket:id=\"statelessLink\"></a><a wicket:id=\"statefullLink\"></
>> a></body></html>");
>> +               }
>> +
>> +               @Override
>> +               protected void onBeforeRender()
>> +               {
>> +                       get("statefullLink").setVisible(false);
>> +                       super.onBeforeRender();
>> +               }
>> +       }
>> +}
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> BookmarkableMapperTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/mapper/BookmarkableMapperTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/core/request/mapper/BookmarkableMapperTest.java
>> index f4fc1aa..e22210b 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> BookmarkableMapperTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> BookmarkableMapperTest.java
>> @@ -28,7 +28,7 @@ import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceReque
>>   import org.apache.wicket.core.request.handler.
>> BookmarkablePageRequestHandler;
>>   import org.apache.wicket.core.request.handler.IPageProvider;
>>   import org.apache.wicket.core.request.handler.IPageRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -177,9 +177,9 @@ public class BookmarkableMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("wicket/bookmarkable/" +
>> PAGE_CLASS_NAME + "?15--foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -198,8 +198,8 @@ public class BookmarkableMapperTest extends
>> AbstractMapperTest
>>                          + "/i1/i2?15--foo-bar&a=b&b=c");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -222,9 +222,9 @@ public class BookmarkableMapperTest extends
>> AbstractMapperTest
>>                          + "?15-ILinkListener.4-foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -246,8 +246,8 @@ public class BookmarkableMapperTest extends
>> AbstractMapperTest
>>
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  assertEquals(page.getRenderCount(), 5);
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> CryptoMapperTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/mapper/CryptoMapperTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/core/request/mapper/CryptoMapperTest.java
>> index 98696fd..f87dcc8 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> CryptoMapperTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> CryptoMapperTest.java
>> @@ -22,7 +22,7 @@ import java.util.function.Supplier;
>>
>>   import org.apache.wicket.MockPage;
>>   import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -358,7 +358,7 @@ public class CryptoMapperTest extends
>> AbstractMapperTest
>>                  final String componentPath = "link";
>>
>>                  PageAndComponentProvider provider = new
>> PageAndComponentProvider(Page1.class, componentPath);
>> -               IRequestHandler requestHandler = new
>> ListenerInterfaceRequestHandler(provider);
>> +               IRequestHandler requestHandler = new
>> ListenerRequestHandler(provider);
>>
>>                  Url plainUrl = mapper.getDelegateMapper().
>> mapHandler(requestHandler);
>>                  assertTrue(plainUrl.toString().startsWith(MOUNTED_URL));
>> @@ -391,9 +391,9 @@ public class CryptoMapperTest extends
>> AbstractMapperTest
>>
>>                  requestHandler = unwrapRequestHandlerDelegate(
>> requestHandler);
>>
>> -               assertThat(requestHandler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(requestHandler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler handler = (
>> ListenerInterfaceRequestHandler) requestHandler;
>> +               ListenerRequestHandler handler = (ListenerRequestHandler)
>> requestHandler;
>>                  assertEquals(componentPath, handler.getComponentPath());
>>                  assertEquals(Page1.class, handler.getPageClass());
>>
>> @@ -407,9 +407,9 @@ public class CryptoMapperTest extends
>> AbstractMapperTest
>>
>>                  requestHandler = unwrapRequestHandlerDelegate(
>> requestHandler);
>>
>> -               assertThat(requestHandler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(requestHandler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               handler = (ListenerInterfaceRequestHandler)
>> requestHandler;
>> +               handler = (ListenerRequestHandler) requestHandler;
>>                  assertEquals(componentPath, handler.getComponentPath());
>>                  assertEquals(Page1.class, handler.getPageClass());
>>          }
>> @@ -603,7 +603,7 @@ public class CryptoMapperTest extends
>> AbstractMapperTest
>>                  MockPage page = new MockPage();
>>                  IRequestableComponent c = page.get("foo:bar");
>>                  PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, c);
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider);
>> +               IRequestHandler handler = new ListenerRequestHandler(
>> provider);
>>
>>                  Url url = mapper.mapHandler(handler);
>>                  url.addQueryParameter("q", "foo");
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> MountedMapperTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/mapper/MountedMapperTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/core/request/mapper/MountedMapperTest.java
>> index d92cc83..f19d866 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> MountedMapperTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> MountedMapperTest.java
>> @@ -23,7 +23,7 @@ import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceReque
>>   import org.apache.wicket.core.request.handler.
>> BookmarkablePageRequestHandler;
>>   import org.apache.wicket.core.request.handler.IPageProvider;
>>   import org.apache.wicket.core.request.handler.IPageRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -210,9 +210,9 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("some/mount/path?15--foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -230,8 +230,8 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("some/mount/path/i1/
>> i2?15--foo-bar&a=b&b=c");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -253,9 +253,9 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("some/mount/path?
>> param1=value1&15-.4-foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -298,9 +298,9 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  context.setNextPageRenderCount(5);
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  assertEquals(5, page.getRenderCount());
>> @@ -329,9 +329,9 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("some/mount/path/i1/
>> i2?-1.-foo-bar&a=b&b=c");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 1);
>>
>> @@ -497,7 +497,7 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  IRequestableComponent c = page.get("foo:bar");
>>
>>                  PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, c);
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider);
>> +               IRequestHandler handler = new ListenerRequestHandler(
>> provider);
>>
>>                  Url url = encoder.mapHandler(handler);
>>
>> @@ -555,7 +555,7 @@ public class MountedMapperTest extends
>> AbstractMapperTest
>>                  IRequestableComponent c = page.get("foo:bar");
>>
>>                  PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, c);
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider, 4);
>> +               IRequestHandler handler = new ListenerRequestHandler(provider,
>> 4);
>>
>>                  Url url = encoder.mapHandler(handler);
>>
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PackageMapperTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/core/request/mapper/PackageMapperTest.java
>> index 6a620ad..b0bb221 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PackageMapperTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PackageMapperTest.java
>> @@ -25,7 +25,7 @@ import org.apache.wicket.core.request.handler.
>> BookmarkableListenerInterfaceReque
>>   import org.apache.wicket.core.request.handler.
>> BookmarkablePageRequestHandler;
>>   import org.apache.wicket.core.request.handler.IPageProvider;
>>   import org.apache.wicket.core.request.handler.IPageRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -243,9 +243,9 @@ public class PackageMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
>> "?15--foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -263,8 +263,8 @@ public class PackageMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
>> "/i1/i2?15--foo-bar&a=b&b=c");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -286,9 +286,9 @@ public class PackageMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse(MOUNT_PATH + '/' + PAGE_CLASS_NAME +
>> "?15-.4-foo-bar");
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  checkPage(page, 15);
>> @@ -309,8 +309,8 @@ public class PackageMapperTest extends
>> AbstractMapperTest
>>
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>>
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>
>>                  IRequestablePage page = h.getPage();
>>                  assertEquals(page.getRenderCount(), 5);
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapperTest.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-core/src/test/java/org/apache/wicket/core/
>> request/mapper/PageInstanceMapperTest.java b/wicket-core/src/test/java/
>> org/apache/wicket/core/request/mapper/PageInstanceMapperTest.java
>> index 9a2eaf0..2691070 100644
>> --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapperTest.java
>> +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/
>> PageInstanceMapperTest.java
>> @@ -24,7 +24,7 @@ import java.util.Locale;
>>   import org.apache.wicket.MockPage;
>>   import org.apache.wicket.core.request.handler.IPageProvider;
>>   import org.apache.wicket.core.request.handler.IPageRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.core.request.handler.PageProvider;
>>   import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
>> @@ -90,9 +90,9 @@ public class PageInstanceMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("wicket/page?4--a-b-c");
>>
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>                  checkPage(h.getPage(), 4);
>>                  assertEquals(h.getComponent().getPageRelativePath(),
>> "a:b:c");
>>                  assertNull(h.getBehaviorIndex());
>> @@ -131,9 +131,9 @@ public class PageInstanceMapperTest extends
>> AbstractMapperTest
>>                  Url url = Url.parse("wicket/page?4-
>> ILinkListener.5-a-b-c");
>>
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>                  checkPage(h.getPage(), 4);
>>                  assertEquals(h.getComponent().getPageRelativePath(),
>> "a:b:c");
>>                  assertEquals((Object)5, h.getBehaviorIndex());
>> @@ -150,9 +150,9 @@ public class PageInstanceMapperTest extends
>> AbstractMapperTest
>>                  context.setNextPageRenderCount(6);
>>
>>                  IRequestHandler handler = encoder.mapRequest(getRequest(
>> url));
>> -               assertThat(handler, instanceOf(
>> ListenerInterfaceRequestHandler.class));
>> +               assertThat(handler, instanceOf(
>> ListenerRequestHandler.class));
>>
>> -               ListenerInterfaceRequestHandler h = (
>> ListenerInterfaceRequestHandler)handler;
>> +               ListenerRequestHandler h = (ListenerRequestHandler)
>> handler;
>>                  assertEquals(6, h.getPage().getRenderCount());
>>          }
>>
>> @@ -287,7 +287,7 @@ public class PageInstanceMapperTest extends
>> AbstractMapperTest
>>                  IRequestableComponent c = page.get("a:b:c");
>>
>>                  PageAndComponentProvider provider = new
>> PageAndComponentProvider(page, c);
>> -               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(provider);
>> +               IRequestHandler handler = new ListenerRequestHandler(
>> provider);
>>
>>                  Url url = encoder.mapHandler(handler);
>>                  assertEquals("wicket/page?15-5.-a-b-c", url.toString());
>>
>> http://git-wip-us.apache.org/repos/asf/wicket/blob/
>> 8342e4ef/wicket-examples/src/main/java/org/apache/wicket/
>> examples/ajax/prototype/Index.java
>> ----------------------------------------------------------------------
>> diff --git a/wicket-examples/src/main/java/org/apache/wicket/
>> examples/ajax/prototype/Index.java b/wicket-examples/src/main/
>> java/org/apache/wicket/examples/ajax/prototype/Index.java
>> index 2795eb5..c62ce4b 100644
>> --- a/wicket-examples/src/main/java/org/apache/wicket/
>> examples/ajax/prototype/Index.java
>> +++ b/wicket-examples/src/main/java/org/apache/wicket/
>> examples/ajax/prototype/Index.java
>> @@ -17,7 +17,7 @@
>>   package org.apache.wicket.examples.ajax.prototype;
>>
>>   import org.apache.wicket.core.request.handler.
>> ComponentRenderingRequestHandler;
>> -import org.apache.wicket.core.request.handler.
>> ListenerInterfaceRequestHandler;
>> +import org.apache.wicket.core.request.handler.ListenerRequestHandler;
>>   import org.apache.wicket.core.request.handler.PageAndComponentProvider;
>>   import org.apache.wicket.examples.WicketExamplePage;
>>   import org.apache.wicket.markup.html.basic.Label;
>> @@ -79,8 +79,7 @@ public class Index extends WicketExamplePage
>>                          @Override
>>                          protected String getOnClickScript(CharSequence url)
>>                          {
>> -                               IRequestHandler handler = new
>> ListenerInterfaceRequestHandler(
>> -                                       new PageAndComponentProvider(getPage(),
>> this));
>> +                               IRequestHandler handler = new
>> ListenerRequestHandler(new PageAndComponentProvider(getPage(), this));
>>                                  Url componentUrl =
>> RequestCycle.get().mapUrlFor(handler);
>>                                  componentUrl.addQueryParameter("anticache",
>> Math.random());
>>                                  return new AppendingStringBuffer("new
>> Ajax.Updater('counter', '").append(
>>
>>