WICKET-6137 remove RequestListenerInterface

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/d1710298
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/d1710298
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/d1710298

Branch: refs/heads/master
Commit: d1710298c7e371f260299f732c58d0bf4d647161
Parents: 7dcdae5
Author: Sven Meier <[email protected]>
Authored: Sat Mar 19 19:57:00 2016 +0100
Committer: Sven Meier <[email protected]>
Committed: Mon Apr 25 11:44:33 2016 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/Component.java  |  22 ++-
 .../org/apache/wicket/DefaultMapperContext.java |  12 --
 .../org/apache/wicket/IRequestListener.java     |   2 +
 .../org/apache/wicket/IResourceListener.java    |  39 ------
 .../java/org/apache/wicket/Initializer.java     |  13 --
 .../apache/wicket/RequestListenerInterface.java |  10 +-
 .../wicket/behavior/AbstractAjaxBehavior.java   |  16 ++-
 .../org/apache/wicket/behavior/Behavior.java    |   3 +-
 .../wicket/behavior/IBehaviorListener.java      |  36 -----
 ...markableListenerInterfaceRequestHandler.java |  31 ++--
 .../ListenerInterfaceRequestHandler.java        | 140 +++++++++++++------
 .../ListenerInvocationNotAllowedException.java  |  10 +-
 .../logger/ListenerInterfaceLogData.java        |  29 +---
 .../mapper/AbstractBookmarkableMapper.java      |  39 +-----
 .../request/mapper/AbstractComponentMapper.java |  27 ----
 .../core/request/mapper/IMapperContext.java     |  17 ---
 .../core/request/mapper/MountedMapper.java      |  11 +-
 .../core/request/mapper/PageInstanceMapper.java |  14 +-
 .../apache/wicket/markup/html/form/Check.java   |   2 +-
 .../wicket/markup/html/form/CheckBox.java       |  11 +-
 .../wicket/markup/html/form/CheckGroup.java     |   9 +-
 .../wicket/markup/html/form/DropDownChoice.java |  11 +-
 .../apache/wicket/markup/html/form/Form.java    |  11 +-
 .../markup/html/form/IFormSubmitListener.java   |  33 -----
 .../markup/html/form/IOnChangeListener.java     |  35 -----
 .../wicket/markup/html/form/ImageButton.java    |   9 +-
 .../apache/wicket/markup/html/form/Radio.java   |   2 +-
 .../wicket/markup/html/form/RadioChoice.java    |  11 +-
 .../wicket/markup/html/form/RadioGroup.java     |   9 +-
 .../wicket/markup/html/form/StatelessForm.java  |   2 +-
 .../apache/wicket/markup/html/image/Image.java  |  14 +-
 .../image/resource/LocalizedImageResource.java  |   5 +-
 .../wicket/markup/html/link/ILinkListener.java  |  32 -----
 .../wicket/markup/html/link/InlineFrame.java    |  11 +-
 .../apache/wicket/markup/html/link/Link.java    |  11 +-
 .../wicket/markup/html/link/ResourceLink.java   |  12 +-
 .../wicket/markup/html/link/StatelessLink.java  |   8 +-
 .../wicket/util/tester/BaseWicketTester.java    |  41 ++----
 .../apache/wicket/util/tester/FormTester.java   |   3 +-
 .../org/apache/wicket/BehaviorRequestTest.java  |  23 +--
 .../java/org/apache/wicket/BehaviorUrlTest.java |  11 +-
 .../ComponentWithLazyModelCreationTest.java     |  16 ++-
 .../behavior/ImmutableBehaviorIdsTest.java      |  11 +-
 .../ListenerInterfaceRequestHandlerTest.java    |  10 +-
 .../core/request/mapper/AbstractMapperTest.java |  13 --
 .../AbstractResourceReferenceMapperTest.java    |   1 -
 .../request/mapper/BookmarkableMapperTest.java  |  15 +-
 .../core/request/mapper/CryptoMapperTest.java   |  11 +-
 .../core/request/mapper/MountedMapperTest.java  |  17 +--
 .../core/request/mapper/PackageMapperTest.java  |  12 +-
 .../request/mapper/PageInstanceMapperTest.java  |   6 +-
 .../core/request/mapper/TestMapperContext.java  |  15 +-
 .../request/mapper/info/ComponentInfoTest.java  |  11 +-
 .../mapper/info/PageComponentInfoTest.java      |   5 +-
 .../wicket/examples/ajax/prototype/Index.java   |   9 +-
 wicket-examples/src/main/webapp/WEB-INF/web.xml |  21 ---
 .../captcha/kittens/KittenCaptchaPanel.java     |   4 +-
 .../request/mapper/info/ComponentInfo.java      |  49 +------
 58 files changed, 350 insertions(+), 663 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 f9a8cd9..877e963 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -58,7 +58,6 @@ import org.apache.wicket.markup.head.StringHeaderItem;
 import org.apache.wicket.markup.html.IHeaderContributor;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.IFormSubmitListener;
 import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
 import org.apache.wicket.markup.html.panel.DefaultMarkupSourcingStrategy;
 import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
@@ -852,7 +851,7 @@ public abstract class Component
         * 
         * @return {@code true} if component has been initialized
         */
-       final boolean isInitialized()
+       public final boolean isInitialized()
        {
                return getFlag(FLAG_INITIALIZED);
        }
@@ -3343,19 +3342,17 @@ public abstract class Component
         *            The parameters that should be rendered into the urls
         * @return The URL
         */
-       public final CharSequence urlFor(final Behavior behaviour,
-               final RequestListenerInterface listener, final PageParameters 
parameters)
+       public final CharSequence urlFor(final Behavior behaviour, final 
PageParameters parameters)
        {
                int id = getBehaviorId(behaviour);
-               IRequestHandler handler = createRequestHandler(listener, 
parameters, id);
+               IRequestHandler handler = createRequestHandler(parameters, id);
                return getRequestCycle().urlFor(handler);
        }
 
        /**
         * Create a suitable request handler depending whether the page is 
stateless or bookmarkable.
         */
-       private IRequestHandler createRequestHandler(RequestListenerInterface 
listener,
-               PageParameters parameters, Integer id)
+       private IRequestHandler createRequestHandler(PageParameters parameters, 
Integer id)
        {
                Page page = getPage();
 
@@ -3365,11 +3362,11 @@ public abstract class Component
                        || 
(getApplication().getPageSettings().getRecreateBookmarkablePagesAfterExpiry()
                                && page.isBookmarkable() && 
page.wasCreatedBookmarkable()))
                {
-                       return new 
BookmarkableListenerInterfaceRequestHandler(provider, listener, id);
+                       return new 
BookmarkableListenerInterfaceRequestHandler(provider, id);
                }
                else
                {
-                       return new ListenerInterfaceRequestHandler(provider, 
listener, id);
+                       return new ListenerInterfaceRequestHandler(provider, 
id);
                }
        }
 
@@ -3393,16 +3390,13 @@ public abstract class Component
         * 
         * @see RequestCycle#urlFor(IRequestHandler)
         * 
-        * @param listener
-        *            The listener interface that the URL should call
         * @param parameters
         *            The parameters that should be rendered into the urls
         * @return The URL
         */
-       public final CharSequence urlFor(final RequestListenerInterface 
listener,
-               final PageParameters parameters)
+       public final CharSequence urlFor(final PageParameters parameters)
        {
-               IRequestHandler handler = createRequestHandler(listener, 
parameters, null);
+               IRequestHandler handler = createRequestHandler(parameters, 
null);
                return getRequestCycle().urlFor(handler);
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java 
b/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
index 486dbf9..6527f96 100644
--- a/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
+++ b/wicket-core/src/main/java/org/apache/wicket/DefaultMapperContext.java
@@ -82,18 +82,6 @@ public class DefaultMapperContext implements IMapperContext
        }
 
        @Override
-       public RequestListenerInterface 
requestListenerInterfaceFromString(final String interfaceName)
-       {
-               return RequestListenerInterface.forName(interfaceName);
-       }
-
-       @Override
-       public String requestListenerInterfaceToString(final 
RequestListenerInterface listenerInterface)
-       {
-               return listenerInterface.getName();
-       }
-
-       @Override
        public IRequestablePage newPageInstance(final Class<? extends 
IRequestablePage> pageClass,
                final PageParameters pageParameters)
        {

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java 
b/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
index 350717f..d94416d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
+++ b/wicket-core/src/main/java/org/apache/wicket/IRequestListener.java
@@ -33,6 +33,8 @@ import org.apache.wicket.util.io.IClusterable;
  */
 public interface IRequestListener extends IClusterable
 {
+
+       boolean includeRenderCount();
        
        /**
         * Called when a request to a behavior is received.

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/IResourceListener.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/IResourceListener.java 
b/wicket-core/src/main/java/org/apache/wicket/IResourceListener.java
deleted file mode 100644
index 983594c..0000000
--- a/wicket-core/src/main/java/org/apache/wicket/IResourceListener.java
+++ /dev/null
@@ -1,39 +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;
-
-
-/**
- * Listens for requests regarding resources. Such resources are typically 
non-static in nature and
- * may even be created on the fly.
- * <p>
- * One use for resource listeners is that they may be used to create 
components such as Image which
- * respond to requests with a localized resource loaded from the classpath. 
The Image class allows
- * reusable components to transparently bundle localized image resources. 
Components that use Image
- * resources (instead of referencing static images in their markup) can be 
distributed as a
- * self-contained JAR file.
- * 
- * @see org.apache.wicket.markup.html.image.Image
- * @see 
org.apache.wicket.markup.html.image.resource.RenderedDynamicImageResource
- * @author Jonathan Locke
- */
-public interface IResourceListener extends IRequestListener
-{
-       /** Resource listener interface object */
-       RequestListenerInterface INTERFACE = new RequestListenerInterface(
-               
IResourceListener.class).setIncludeRenderCount(false).setRenderPageAfterInvocation(false);
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/Initializer.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Initializer.java 
b/wicket-core/src/main/java/org/apache/wicket/Initializer.java
index 19fa544..cb81938 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Initializer.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Initializer.java
@@ -16,11 +16,6 @@
  */
 package org.apache.wicket;
 
-import org.apache.wicket.behavior.IBehaviorListener;
-import org.apache.wicket.markup.html.form.IFormSubmitListener;
-import org.apache.wicket.markup.html.form.IOnChangeListener;
-import org.apache.wicket.markup.html.link.ILinkListener;
-
 /**
  * Initializer for components in wicket core library.
  * 
@@ -34,14 +29,6 @@ public class Initializer implements IInitializer
        @Override
        public void init(Application application)
        {
-               // Register listener interfaces explicitly (even though they 
implicitly
-               // register when loaded) because deserialization of an object 
that
-               // implements an interface does not load the interfaces it 
implements!
-               IBehaviorListener.INTERFACE.register();
-               IFormSubmitListener.INTERFACE.register();
-               ILinkListener.INTERFACE.register();
-               IOnChangeListener.INTERFACE.register();
-               IResourceListener.INTERFACE.register();
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java 
b/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
index 64c26f0..f45b09e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
+++ b/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
@@ -16,18 +16,14 @@
  */
 package org.apache.wicket;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.wicket.authorization.AuthorizationException;
 import org.apache.wicket.behavior.Behavior;
-import 
org.apache.wicket.request.RequestHandlerExecutor.ReplaceHandlerException;
-import org.apache.wicket.request.component.IRequestableComponent;
 import 
org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException;
+import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.util.lang.Classes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -175,7 +171,7 @@ public class RequestListenerInterface
                        // 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(this, 
component, null,
+                       throw new 
ListenerInvocationNotAllowedException(component, null,
                                "Component rejected interface invocation");
                }
 
@@ -200,7 +196,7 @@ public class RequestListenerInterface
                {
                        log.warn("behavior not enabled; ignore call. Behavior 
{} at component {}", behavior,
                                component);
-                       throw new ListenerInvocationNotAllowedException(this, 
component, behavior,
+                       throw new 
ListenerInvocationNotAllowedException(component, behavior,
                                "Behavior rejected interface invocation. ");
                }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
index 5a25fc9..d4c9877 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/behavior/AbstractAjaxBehavior.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.behavior;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
@@ -30,7 +30,7 @@ import org.apache.wicket.util.lang.Args;
  * @author Ralf Ebert
  * @author Igor Vaynberg
  */
-public abstract class AbstractAjaxBehavior extends Behavior implements 
IBehaviorListener
+public abstract class AbstractAjaxBehavior extends Behavior implements 
IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -68,6 +68,12 @@ public abstract class AbstractAjaxBehavior extends Behavior 
implements IBehavior
                onBind();
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * Gets the url that references this handler.
         * 
@@ -81,11 +87,7 @@ public abstract class AbstractAjaxBehavior extends Behavior 
implements IBehavior
                                "Behavior must be bound to a component to 
create the URL");
                }
 
-               final RequestListenerInterface rli;
-
-               rli = IBehaviorListener.INTERFACE;
-
-               return getComponent().urlFor(this, rli, new PageParameters());
+               return getComponent().urlFor(this, new PageParameters());
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java 
b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
index 55517d2..2267e74 100644
--- a/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
+++ b/wicket-core/src/main/java/org/apache/wicket/behavior/Behavior.java
@@ -21,6 +21,7 @@ import java.lang.reflect.Method;
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.IComponentAwareEventSink;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.event.IEvent;
 import org.apache.wicket.lambda.WicketConsumer;
 import org.apache.wicket.lambda.WicketFunction;
@@ -153,7 +154,7 @@ public abstract class Behavior
         */
        public boolean getStatelessHint(Component component)
        {
-               if (this instanceof IBehaviorListener)
+               if (this instanceof IRequestListener)
                {
                        // this behavior implements a callback interface, so it 
cannot be stateless
                        return false;

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java 
b/wicket-core/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java
deleted file mode 100644
index 8b029d0..0000000
--- 
a/wicket-core/src/main/java/org/apache/wicket/behavior/IBehaviorListener.java
+++ /dev/null
@@ -1,36 +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.behavior;
-
-import org.apache.wicket.IRequestListener;
-import org.apache.wicket.RequestListenerInterface;
-
-/**
- * Listens for requests to behaviors. When {@link 
org.apache.wicket.behavior.Behavior}s are
- * 'enriched' with this interface, they can receive requests themselves. You 
can use this for
- * example to implement AJAX behavior, though you'll probably want to extend 
from
- * {@link org.apache.wicket.behavior.AbstractAjaxBehavior} directly instead in 
that case.
- * 
- * @author Eelco Hillenius
- */
-public interface IBehaviorListener extends IRequestListener
-{
-       /** Behavior listener interface */
-       RequestListenerInterface INTERFACE = new RequestListenerInterface(
-               IBehaviorListener.class);
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 edc65a8..01eecfe 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
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.core.request.handler;
 
-import org.apache.wicket.RequestListenerInterface;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.request.IRequestCycle;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
@@ -36,8 +36,6 @@ public class BookmarkableListenerInterfaceRequestHandler
 {
        private final IPageAndComponentProvider pageComponentProvider;
 
-       private final RequestListenerInterface listenerInterface;
-
        private final Integer behaviorIndex;
 
        /**
@@ -49,13 +47,11 @@ public class BookmarkableListenerInterfaceRequestHandler
         */
        public BookmarkableListenerInterfaceRequestHandler(
                IPageAndComponentProvider pageComponentProvider,
-               RequestListenerInterface listenerInterface, Integer 
behaviorIndex)
+               Integer behaviorIndex)
        {
                Args.notNull(pageComponentProvider, "pageComponentProvider");
-               Args.notNull(listenerInterface, "listenerInterface");
 
                this.pageComponentProvider = pageComponentProvider;
-               this.listenerInterface = listenerInterface;
                this.behaviorIndex = behaviorIndex;
        }
 
@@ -65,10 +61,17 @@ public class BookmarkableListenerInterfaceRequestHandler
         * @param pageComponentProvider
         * @param listenerInterface
         */
-       public BookmarkableListenerInterfaceRequestHandler(
-               PageAndComponentProvider pageComponentProvider, 
RequestListenerInterface listenerInterface)
+       public 
BookmarkableListenerInterfaceRequestHandler(PageAndComponentProvider 
pageComponentProvider)
        {
-               this(pageComponentProvider, listenerInterface, null);
+               this(pageComponentProvider, null);
+       }
+
+       public boolean includeRenderCount() {
+               if (behaviorIndex == null) {
+                       return 
((IRequestListener)getComponent()).includeRenderCount();
+               } else {
+                       return 
((IRequestListener)getComponent().getBehaviorById(getBehaviorIndex())).includeRenderCount();
+               }
        }
 
        /**
@@ -132,16 +135,6 @@ public class BookmarkableListenerInterfaceRequestHandler
        }
 
        /**
-        * Returns the listener interface.
-        *
-        * @return listener interface
-        */
-       public RequestListenerInterface getListenerInterface()
-       {
-               return listenerInterface;
-       }
-
-       /**
         * Returns index of behavior this listener is targeted on or 
<code>null</code> if component is
         * the target
         *

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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
index ce3286f..a098f02 100644
--- 
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
@@ -16,8 +16,9 @@
  */
 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.RequestListenerInterface;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.behavior.Behavior;
 import 
org.apache.wicket.core.request.handler.RenderPageRequestHandler.RedirectPolicy;
@@ -43,13 +44,11 @@ public class ListenerInterfaceRequestHandler
                IComponentRequestHandler,
                ILoggableRequestHandler
 {
-
+       
        private static final Logger LOG = 
LoggerFactory.getLogger(ListenerInterfaceRequestHandler.class);
 
        private final IPageAndComponentProvider pageComponentProvider;
 
-       private final RequestListenerInterface listenerInterface;
-
        private final Integer behaviorId;
 
        private ListenerInterfaceLogData logData;
@@ -61,14 +60,11 @@ public class ListenerInterfaceRequestHandler
         * @param listenerInterface
         * @param behaviorIndex
         */
-       public ListenerInterfaceRequestHandler(IPageAndComponentProvider 
pageComponentProvider,
-               RequestListenerInterface listenerInterface, Integer 
behaviorIndex)
+       public ListenerInterfaceRequestHandler(IPageAndComponentProvider 
pageComponentProvider, Integer behaviorIndex)
        {
                Args.notNull(pageComponentProvider, "pageComponentProvider");
-               Args.notNull(listenerInterface, "listenerInterface");
 
                this.pageComponentProvider = pageComponentProvider;
-               this.listenerInterface = listenerInterface;
                behaviorId = behaviorIndex;
        }
 
@@ -78,12 +74,19 @@ public class ListenerInterfaceRequestHandler
         * @param pageComponentProvider
         * @param listenerInterface
         */
-       public ListenerInterfaceRequestHandler(PageAndComponentProvider 
pageComponentProvider,
-               RequestListenerInterface listenerInterface)
+       public ListenerInterfaceRequestHandler(PageAndComponentProvider 
pageComponentProvider)
        {
-               this(pageComponentProvider, listenerInterface, null);
+               this(pageComponentProvider, null);
        }
 
+       public boolean includeRenderCount() {
+               if (behaviorId == null) {
+                       return 
((IRequestListener)getComponent()).includeRenderCount();
+               } else {
+                       return 
((IRequestListener)getComponent().getBehaviorById(getBehaviorIndex())).includeRenderCount();
+               }
+       }
+       
        @Override
        public IRequestableComponent getComponent()
        {
@@ -122,23 +125,12 @@ public class ListenerInterfaceRequestHandler
        {
                if (logData == null)
                {
-                       logData = new 
ListenerInterfaceLogData(pageComponentProvider, listenerInterface,
-                               behaviorId);
+                       logData = new 
ListenerInterfaceLogData(pageComponentProvider, behaviorId);
                }
                pageComponentProvider.detach();
        }
 
        /**
-        * Returns the listener interface.
-        *
-        * @return listener interface
-        */
-       public RequestListenerInterface getListenerInterface()
-       {
-               return listenerInterface;
-       }
-
-       /**
         * Index of target behavior or <code>null</code> if component is the 
target.
         *
         * @return behavior index or <code>null</code>
@@ -188,7 +180,6 @@ public class ListenerInterfaceRequestHandler
                RedirectPolicy policy = isStateless
                        ? RedirectPolicy.NEVER_REDIRECT
                        : RedirectPolicy.AUTO_REDIRECT;
-               final IPageProvider pageProvider = new PageProvider(page);
 
                final boolean canCallListenerInterfaceAfterExpiry = component 
!= null
                                ? 
component.canCallListenerInterfaceAfterExpiry()
@@ -207,9 +198,9 @@ public class ListenerInterfaceRequestHandler
                        if (LOG.isDebugEnabled())
                        {
                                LOG.debug(
-                                       "A ListenerInterface '{}' assigned to 
'{}' is executed on an expired stateful page. "
+                                       "A ListenerInterface assigned to '{}' 
is executed on an expired stateful page. "
                                                + "Scheduling re-create of the 
page and ignoring the listener interface...",
-                                       listenerInterface, getComponentPath());
+                                       getComponentPath());
                        }
 
                        if (isAjax)
@@ -218,34 +209,25 @@ public class ListenerInterfaceRequestHandler
                        }
 
                        requestCycle.scheduleRequestHandlerAfterCurrent(new 
RenderPageRequestHandler(
-                               pageProvider, policy));
+                               new PageProvider(page), policy));
                        return;
                }
 
-               if (isAjax == false && 
listenerInterface.isRenderPageAfterInvocation())
-               {
-                       // 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(
-                               pageProvider, policy));
-               }
-
-               invokeListener();
+               invokeListener(requestCycle, policy, isAjax);
        }
 
-       private void invokeListener()
+       private void invokeListener(IRequestCycle requestCycle, RedirectPolicy 
policy, boolean ajax)
        {
                if (getBehaviorIndex() == null)
                {
-                       listenerInterface.invoke(getComponent());
+                       invoke(requestCycle, policy, ajax, getComponent());
                }
                else
                {
                        try
                        {
                                Behavior behavior = 
getComponent().getBehaviorById(behaviorId);
-                               listenerInterface.invoke(getComponent(), 
behavior);
+                               invoke(requestCycle, policy, ajax, 
getComponent(), behavior);
                        }
                        catch (IndexOutOfBoundsException e)
                        {
@@ -254,6 +236,84 @@ public class ListenerInterfaceRequestHandler
 
                }
        }
+       
+       /**
+        * 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(null))
+               {
+                       // 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, null))
+               {
+                       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.includeRenderCount() && !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()

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
index a97d99d..f878b89 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInvocationNotAllowedException.java
@@ -17,7 +17,6 @@
 package org.apache.wicket.core.request.handler;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.behavior.Behavior;
 
 /**
@@ -36,20 +35,18 @@ public class ListenerInvocationNotAllowedException extends 
RuntimeException
        /**
         * Constructor
         *
-        * @param iface
         * @param component
         * @param behavior
         * @param message
         */
-       public ListenerInvocationNotAllowedException(RequestListenerInterface 
iface,
-               Component component, Behavior behavior, String message)
+       public ListenerInvocationNotAllowedException(Component component, 
Behavior behavior, String message)
        {
-               super(message + detail(iface, component, behavior));
+               super(message + detail(component, behavior));
                this.component = component;
                this.behavior = behavior;
        }
 
-       private static String detail(RequestListenerInterface iface, Component 
component,
+       private static String detail(Component component,
                Behavior behavior)
        {
                StringBuilder detail = new StringBuilder("Component: 
").append(component.toString(false));
@@ -57,7 +54,6 @@ public class ListenerInvocationNotAllowedException extends 
RuntimeException
                {
                        detail.append(" Behavior: 
").append(behavior.toString());
                }
-               detail.append(" Listener: ").append(iface.toString());
                return detail.toString();
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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
index 4a5ad40..5ed97a7 100644
--- 
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
@@ -17,11 +17,9 @@
 package org.apache.wicket.core.request.handler.logger;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.RequestListenerInterface;
 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.IFormSubmitListener;
 import org.apache.wicket.markup.html.form.IFormSubmitter;
 import org.apache.wicket.request.component.IRequestableComponent;
 
@@ -38,7 +36,6 @@ public class ListenerInterfaceLogData extends PageLogData
        private final String componentPath;
        private final Integer behaviorIndex;
        private Class<? extends Behavior> behaviorClass;
-       private final String interfaceName;
        private Class<? extends IRequestableComponent> submittingComponentClass;
        private String submittingComponentPath;
 
@@ -49,8 +46,7 @@ public class ListenerInterfaceLogData extends PageLogData
         * @param listenerInterface
         * @param behaviorIndex
         */
-       public ListenerInterfaceLogData(IPageAndComponentProvider 
pageAndComponentProvider,
-               RequestListenerInterface listenerInterface, Integer 
behaviorIndex)
+       public ListenerInterfaceLogData(IPageAndComponentProvider 
pageAndComponentProvider, Integer behaviorIndex)
        {
                super(pageAndComponentProvider);
                componentClass = 
tryToGetComponentClass(pageAndComponentProvider);
@@ -73,15 +69,12 @@ public class ListenerInterfaceLogData extends PageLogData
                {
                        behaviorClass = null;
                }
-               interfaceName = listenerInterface.getName();
-               if 
(listenerInterface.getListenerInterfaceClass().equals(IFormSubmitListener.class))
+               
+               final Component formSubmitter = 
tryToGetFormSubmittingComponent(pageAndComponentProvider);
+               if (formSubmitter != null)
                {
-                       final Component formSubmitter = 
tryToGetFormSubmittingComponent(pageAndComponentProvider);
-                       if (formSubmitter != null)
-                       {
-                               submittingComponentClass = 
formSubmitter.getClass();
-                               submittingComponentPath = 
formSubmitter.getPageRelativePath();
-                       }
+                       submittingComponentClass = formSubmitter.getClass();
+                       submittingComponentPath = 
formSubmitter.getPageRelativePath();
                }
        }
 
@@ -166,14 +159,6 @@ public class ListenerInterfaceLogData extends PageLogData
        }
 
        /**
-        * @return interfaceName
-        */
-       public final String getInterfaceName()
-       {
-               return interfaceName;
-       }
-
-       /**
         * @return submittingComponentClass
         */
        public Class<? extends IRequestableComponent> 
getSubmittingComponentClass()
@@ -213,8 +198,6 @@ public class ListenerInterfaceLogData extends PageLogData
                        sb.append(",behaviorClass=");
                        sb.append(getBehaviorClass().getName());
                }
-               sb.append(",interfaceName=");
-               sb.append(getInterfaceName());
                if (getSubmittingComponentClass() != null)
                {
                        sb.append(",submittingComponentClass=");

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 4d34e8c..963c698 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
@@ -19,7 +19,6 @@ package org.apache.wicket.core.request.mapper;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.wicket.RequestListenerInterface;
 import 
org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.BookmarkablePageRequestHandler;
 import org.apache.wicket.core.request.handler.IPageRequestHandler;
@@ -31,7 +30,6 @@ import org.apache.wicket.protocol.http.PageExpiredException;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestHandlerDelegate;
-import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
 import org.apache.wicket.request.component.IRequestablePage;
@@ -297,41 +295,18 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                PageInfo pageInfo = pageComponentInfo.getPageInfo();
                ComponentInfo componentInfo = 
pageComponentInfo.getComponentInfo();
                Integer renderCount = null;
-               RequestListenerInterface listenerInterface = null;
 
                if (componentInfo != null)
                {
                        renderCount = componentInfo.getRenderCount();
-                       listenerInterface = 
requestListenerInterfaceFromString(componentInfo.getListenerInterface());
                }
 
-               if (listenerInterface != null)
-               {
-                       PageAndComponentProvider provider = new 
PageAndComponentProvider(pageInfo.getPageId(),
-                               pageClass, pageParameters, renderCount, 
componentInfo.getComponentPath());
+               PageAndComponentProvider provider = new 
PageAndComponentProvider(pageInfo.getPageId(),
+                       pageClass, pageParameters, renderCount, 
componentInfo.getComponentPath());
 
-                       provider.setPageSource(getContext());
+               provider.setPageSource(getContext());
 
-                       return new ListenerInterfaceRequestHandler(provider, 
listenerInterface,
-                               componentInfo.getBehaviorId());
-               }
-               else
-               {
-                       if (logger.isWarnEnabled())
-                       {
-                               if (componentInfo != null)
-                               {
-                                       logger.warn("Unknown listener interface 
'{}'",
-                                               
componentInfo.getListenerInterface());
-                               }
-                               else
-                               {
-                                       logger.warn("Cannot extract the 
listener interface for PageComponentInfo: '{}'" +
-                                               pageComponentInfo);
-                               }
-                       }
-                       return null;
-               }
+               return new ListenerInterfaceRequestHandler(provider, 
componentInfo.getBehaviorId());
        }
 
        /**
@@ -463,15 +438,13 @@ public abstract class AbstractBookmarkableMapper extends 
AbstractComponentMapper
                        }
 
                        Integer renderCount = null;
-                       if 
(handler.getListenerInterface().isIncludeRenderCount())
+                       if (handler.includeRenderCount())
                        {
                                renderCount = handler.getRenderCount();
                        }
 
                        PageInfo pageInfo = getPageInfo(handler);
-                       ComponentInfo componentInfo = new 
ComponentInfo(renderCount,
-                               
requestListenerInterfaceToString(handler.getListenerInterface()),
-                               handler.getComponentPath(), 
handler.getBehaviorIndex());
+                       ComponentInfo componentInfo = new 
ComponentInfo(renderCount, handler.getComponentPath(), 
handler.getBehaviorIndex());
 
                        PageParameters parameters = 
getRecreateMountedPagesAfterExpiry() ? new PageParameters(
                                
handler.getPage().getPageParameters()).mergeWith(handler.getPageParameters())

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
index 923a43f..71a28f5 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractComponentMapper.java
@@ -17,7 +17,6 @@
 package org.apache.wicket.core.request.mapper;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Url;
@@ -48,32 +47,6 @@ public abstract class AbstractComponentMapper extends 
AbstractMapper implements
        }
 
        /**
-        * Converts the specified listener interface to String.
-        *
-        * @param listenerInterface
-        * @return listenerInterface name as string
-        */
-       protected String 
requestListenerInterfaceToString(RequestListenerInterface listenerInterface)
-       {
-               Args.notNull(listenerInterface, "listenerInterface");
-
-               return 
getContext().requestListenerInterfaceToString(listenerInterface);
-       }
-
-       /**
-        * Creates listener interface from the specified string
-        *
-        * @param interfaceName
-        * @return listener interface
-        */
-       protected RequestListenerInterface 
requestListenerInterfaceFromString(String interfaceName)
-       {
-               Args.notEmpty(interfaceName, "interfaceName");
-
-               return 
getContext().requestListenerInterfaceFromString(interfaceName);
-       }
-
-       /**
         * Extracts the {@link PageComponentInfo} from the URL. The {@link 
PageComponentInfo} is encoded
         * as the very first query parameter and the parameter consists of name 
only (no value).
         *

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IMapperContext.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IMapperContext.java
 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IMapperContext.java
index 52366d3..792904f 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IMapperContext.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/IMapperContext.java
@@ -16,7 +16,6 @@
  */
 package org.apache.wicket.core.request.mapper;
 
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.resource.ResourceReferenceRegistry;
 
@@ -53,22 +52,6 @@ public interface IMapperContext extends IPageSource
        ResourceReferenceRegistry getResourceReferenceRegistry();
 
        /**
-        * Returns the listener interface name as string.
-        *
-        * @param listenerInterface
-        * @return listener interface name as string
-        */
-       String requestListenerInterfaceToString(RequestListenerInterface 
listenerInterface);
-
-       /**
-        * Returns listener interface for the name
-        *
-        * @param interfaceName
-        * @return listener interface
-        */
-       RequestListenerInterface requestListenerInterfaceFromString(String 
interfaceName);
-
-       /**
         * Returns the home page class.
         *
         * @return home page class

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 965b316..1b6aa28 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,6 @@ package org.apache.wicket.core.request.mapper;
 
 import java.util.function.Supplier;
 
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Request;
@@ -166,19 +165,15 @@ public class MountedMapper extends 
AbstractBookmarkableMapper
                        IRequestablePage page = handler.getPage();
                        if (checkPageInstance(page))
                        {
-                               String componentPath = 
handler.getComponentPath();
-                               RequestListenerInterface listenerInterface = 
handler.getListenerInterface();
-
                                Integer renderCount = null;
-                               if (listenerInterface.isIncludeRenderCount())
+                               if (handler.includeRenderCount())
                                {
                                        renderCount = page.getRenderCount();
                                }
 
+                               String componentPath = 
handler.getComponentPath();
                                PageInfo pageInfo = getPageInfo(handler);
-                               ComponentInfo componentInfo = new 
ComponentInfo(renderCount,
-                                       
requestListenerInterfaceToString(listenerInterface), componentPath,
-                                       handler.getBehaviorIndex());
+                               ComponentInfo componentInfo = new 
ComponentInfo(renderCount, componentPath, handler.getBehaviorIndex());
                                PageComponentInfo pageComponentInfo = new 
PageComponentInfo(pageInfo, componentInfo);
                                PageParameters parameters = new 
PageParameters(page.getPageParameters());
                                UrlInfo urlInfo = new 
UrlInfo(pageComponentInfo, page.getClass(),

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 a034642..e983131 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,6 @@
  */
 package org.apache.wicket.core.request.mapper;
 
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
 import org.apache.wicket.core.request.handler.PageAndComponentProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
@@ -86,11 +85,7 @@ public class PageInstanceMapper extends 
AbstractComponentMapper
 
                                        provider.setPageSource(getContext());
 
-                                       // listener interface
-                                       RequestListenerInterface 
listenerInterface = 
requestListenerInterfaceFromString(componentInfo.getListenerInterface());
-
-                                       return new 
ListenerInterfaceRequestHandler(provider, listenerInterface,
-                                               componentInfo.getBehaviorId());
+                                       return new 
ListenerInterfaceRequestHandler(provider, componentInfo.getBehaviorId());
                                }
                        }
                }
@@ -117,18 +112,15 @@ public class PageInstanceMapper extends 
AbstractComponentMapper
                        ListenerInterfaceRequestHandler handler = 
(ListenerInterfaceRequestHandler)requestHandler;
                        IRequestablePage page = handler.getPage();
                        String componentPath = handler.getComponentPath();
-                       RequestListenerInterface listenerInterface = 
handler.getListenerInterface();
 
                        Integer renderCount = null;
-                       if (listenerInterface.isIncludeRenderCount())
+                       if (handler.includeRenderCount())
                        {
                                renderCount = page.getRenderCount();
                        }
 
                        PageInfo pageInfo = new PageInfo(page.getPageId());
-                       ComponentInfo componentInfo = new 
ComponentInfo(renderCount,
-                               
requestListenerInterfaceToString(listenerInterface), componentPath,
-                               handler.getBehaviorIndex());
+                       ComponentInfo componentInfo = new 
ComponentInfo(renderCount, componentPath, handler.getBehaviorIndex());
                        info = new PageComponentInfo(pageInfo, componentInfo);
                }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
index dab8129..91aff59 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Check.java
@@ -198,7 +198,7 @@ public class Check<T> extends LabeledWebMarkupContainer 
implements IGenericCompo
                if (group.wantOnSelectionChangedNotifications())
                {
                        // url that points to this components IOnChangeListener 
method
-                       CharSequence url = 
group.urlFor(IOnChangeListener.INTERFACE, new PageParameters());
+                       CharSequence url = group.urlFor(new PageParameters());
 
                        Form<?> form = group.findParent(Form.class);
                        if (form != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
index 180f191..655533a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckBox.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.form;
 
 import java.util.Locale;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -51,7 +52,7 @@ import org.apache.wicket.util.convert.IConverter;
  * 
  * @author Jonathan Locke
  */
-public class CheckBox extends FormComponent<Boolean> implements 
IOnChangeListener
+public class CheckBox extends FormComponent<Boolean> implements 
IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -74,6 +75,12 @@ public class CheckBox extends FormComponent<Boolean> 
implements IOnChangeListene
                setType(Boolean.class);
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * @see 
org.apache.wicket.markup.html.form.IOnChangeListener#onSelectionChanged()
         */
@@ -163,7 +170,7 @@ public class CheckBox extends FormComponent<Boolean> 
implements IOnChangeListene
                // checkbox is clicked?
                if (wantOnSelectionChangedNotifications())
                {
-                       CharSequence url = urlFor(IOnChangeListener.INTERFACE, 
new PageParameters());
+                       CharSequence url = urlFor(new PageParameters());
 
                        Form<?> form = findParent(Form.class);
                        if (form != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
index 1e6d804..5c62da5 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/CheckGroup.java
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.form;
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -58,7 +59,7 @@ import org.slf4j.LoggerFactory;
  * @param <T>
  *            The model object type
  */
-public class CheckGroup<T> extends FormComponent<Collection<T>> implements 
IOnChangeListener
+public class CheckGroup<T> extends FormComponent<Collection<T>> implements 
IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -200,6 +201,12 @@ public class CheckGroup<T> extends 
FormComponent<Collection<T>> implements IOnCh
                tag.remove("name");
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * Called when a selection changes.
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
index ca03dfd..60f97fa 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/DropDownChoice.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.form;
 
 import java.util.List;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.model.IModel;
@@ -63,7 +64,7 @@ import 
org.apache.wicket.request.mapper.parameter.PageParameters;
  * @param <T>
  *            The model object type
  */
-public class DropDownChoice<T> extends AbstractSingleSelectChoice<T> 
implements IOnChangeListener
+public class DropDownChoice<T> extends AbstractSingleSelectChoice<T> 
implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -202,6 +203,12 @@ public class DropDownChoice<T> extends 
AbstractSingleSelectChoice<T> implements
                super(id, model, choices, renderer);
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * Called when a selection changes.
         */
@@ -231,7 +238,7 @@ public class DropDownChoice<T> extends 
AbstractSingleSelectChoice<T> implements
                {
                        // we do not want relative URL here, because it will be 
used by
                        // Form#dispatchEvent
-                       CharSequence url = urlFor(IOnChangeListener.INTERFACE, 
new PageParameters());
+                       CharSequence url = urlFor(new PageParameters());
 
                        Form<?> form = findParent(Form.class);
                        if (form != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
index efa7137..fbdc568 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
@@ -30,6 +30,7 @@ import org.apache.commons.fileupload.FileUploadBase;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.wicket.Component;
 import org.apache.wicket.IGenericComponent;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -146,7 +147,7 @@ import org.slf4j.LoggerFactory;
  */
 public class Form<T> extends WebMarkupContainer
        implements
-               IFormSubmitListener,
+               IRequestListener,
                IGenericComponent<T, Form<T>>
 {
        private static final String HIDDEN_DIV_START = "<div 
style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">";
@@ -674,6 +675,12 @@ public class Form<T> extends WebMarkupContainer
                return getFlag(FLAG_SUBMITTED);
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * THIS METHOD IS NOT PART OF THE WICKET API. DO NOT ATTEMPT TO 
OVERRIDE OR CALL IT.
         * 
@@ -1646,7 +1653,7 @@ public class Form<T> extends WebMarkupContainer
         */
        protected CharSequence getActionUrl()
        {
-               return urlFor(IFormSubmitListener.INTERFACE, new 
PageParameters());
+               return urlFor(new PageParameters());
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
deleted file mode 100644
index 3dfff96..0000000
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IFormSubmitListener.java
+++ /dev/null
@@ -1,33 +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.markup.html.form;
-
-import org.apache.wicket.IRequestListener;
-import org.apache.wicket.RequestListenerInterface;
-
-/**
- * Listener interface that is called when a form is submitted.
- * 
- * @author Jonathan Locke
- */
-public interface IFormSubmitListener extends IRequestListener
-{
-       /** Listener interface */
-       RequestListenerInterface INTERFACE = new RequestListenerInterface(
-               IFormSubmitListener.class);
-
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IOnChangeListener.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IOnChangeListener.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IOnChangeListener.java
deleted file mode 100644
index 964c531..0000000
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/IOnChangeListener.java
+++ /dev/null
@@ -1,35 +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.markup.html.form;
-
-import org.apache.wicket.IRequestListener;
-import org.apache.wicket.RequestListenerInterface;
-
-/**
- * Listener method for OnChange events of dropdown lists and onclick events of 
CheckBoxes and
- * RadioChoice components. When any of those components 
wantOnSelectionChangedNotifications() method
- * returns true, a javascript onchange or onclick handler will be generated 
that calls this
- * interface method when the user changes the selection.
- * 
- * @author Eelco Hillenius
- */
-public interface IOnChangeListener extends IRequestListener
-{
-       /** Listener interface */
-       RequestListenerInterface INTERFACE = new RequestListenerInterface(
-               IOnChangeListener.class);
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
index 978d138..702daad 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/ImageButton.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.markup.html.form;
 
-import org.apache.wicket.IResourceListener;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.image.resource.LocalizedImageResource;
 import org.apache.wicket.model.IModel;
@@ -34,7 +34,7 @@ import org.apache.wicket.request.resource.ResourceReference;
  * 
  * @author Jonathan Locke
  */
-public class ImageButton extends Button implements IResourceListener
+public class ImageButton extends Button implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -126,6 +126,11 @@ public class ImageButton extends Button implements 
IResourceListener
                this(id, new Model<String>(string));
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return false;
+       }
 
        /**
         * @see org.apache.wicket.IResourceListener#onResourceRequested()

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
index 20965b2..8db42ed 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Radio.java
@@ -183,7 +183,7 @@ public class Radio<T> extends LabeledWebMarkupContainer 
implements IGenericCompo
                if (group.wantOnSelectionChangedNotifications())
                {
                        // url that points to this components IOnChangeListener 
method
-                       CharSequence url = 
group.urlFor(IOnChangeListener.INTERFACE, new PageParameters());
+                       CharSequence url = group.urlFor(new PageParameters());
 
                        Form<?> form = group.findParent(Form.class);
                        if (form != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
index e8af55e..1d336ea 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioChoice.java
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.form;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.model.IModel;
@@ -65,7 +66,7 @@ import org.apache.wicket.util.value.IValueMap;
  * @param <T>
  *            The model object type
  */
-public class RadioChoice<T> extends AbstractSingleSelectChoice<T> implements 
IOnChangeListener
+public class RadioChoice<T> extends AbstractSingleSelectChoice<T> implements 
IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -244,6 +245,12 @@ public class RadioChoice<T> extends 
AbstractSingleSelectChoice<T> implements IOn
                tag.remove("name");
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * @see 
org.apache.wicket.markup.html.form.IOnChangeListener#onSelectionChanged()
         */
@@ -527,7 +534,7 @@ public class RadioChoice<T> extends 
AbstractSingleSelectChoice<T> implements IOn
                        // when the option is clicked?
                        if (wantOnSelectionChangedNotifications())
                        {
-                               CharSequence url = 
urlFor(IOnChangeListener.INTERFACE, new PageParameters());
+                               CharSequence url = urlFor(new PageParameters());
 
                                Form<?> form = findParent(Form.class);
                                if (form != null)

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
index e4f142e..795132d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/RadioGroup.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.form;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -47,7 +48,7 @@ import org.apache.wicket.util.visit.IVisitor;
  * @param <T>
  *            The model object type
  */
-public class RadioGroup<T> extends FormComponent<T> implements 
IOnChangeListener
+public class RadioGroup<T> extends FormComponent<T> implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -163,6 +164,12 @@ public class RadioGroup<T> extends FormComponent<T> 
implements IOnChangeListener
                tag.remove("name");
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * Called when a selection changes.
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
index 2e41325..f258556 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/StatelessForm.java
@@ -82,7 +82,7 @@ public class StatelessForm<T> extends Form<T>
        @Override
        protected CharSequence getActionUrl()
        {
-               return urlFor(IFormSubmitListener.INTERFACE, 
getPage().getPageParameters());
+               return urlFor(getPage().getPageParameters());
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
index 1b9622c..28f17ee 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/Image.java
@@ -22,7 +22,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.IResourceListener;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
@@ -49,7 +49,7 @@ import org.apache.wicket.request.resource.ResourceReference;
  * @author Jonathan Locke
  * @author Tobias Soloschenko
  */
-public class Image extends WebComponent implements IResourceListener
+public class Image extends WebComponent implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -210,6 +210,12 @@ public class Image extends WebComponent implements 
IResourceListener
                this(id, new Model<>(string));
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return false;
+       }
+       
        /**
         * @see org.apache.wicket.IResourceListener#onResourceRequested()
         */
@@ -582,9 +588,7 @@ public class Image extends WebComponent implements 
IResourceListener
        @Override
        public boolean canCallListenerInterface(Method method)
        {
-               boolean isResource = method != null &&
-                       
IResourceListener.class.isAssignableFrom(method.getDeclaringClass());
-               if (isResource && isVisibleInHierarchy())
+               if (isVisibleInHierarchy())
                {
                        // when the image data is requested we do not care if 
this component
                        // is enabled in

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
index 10f25f0..93a2e39 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/image/resource/LocalizedImageResource.java
@@ -20,9 +20,7 @@ import java.util.Locale;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
-import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.IResourceFactory;
-import org.apache.wicket.IResourceListener;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
@@ -33,6 +31,7 @@ import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.request.resource.PackageResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.parse.metapattern.Group;
 import org.apache.wicket.util.parse.metapattern.MetaPattern;
@@ -333,7 +332,7 @@ public final class LocalizedImageResource implements 
IClusterable
                else
                {
                        // Create URL to component
-                       url = component.urlFor(IResourceListener.INTERFACE, 
resourceParameters);
+                       url = component.urlFor(resourceParameters);
                }
 
                // Set the SRC attribute to point to the component or shared 
resource

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ILinkListener.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ILinkListener.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ILinkListener.java
deleted file mode 100644
index c2d37f1..0000000
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ILinkListener.java
+++ /dev/null
@@ -1,32 +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.markup.html.link;
-
-import org.apache.wicket.IRequestListener;
-import org.apache.wicket.RequestListenerInterface;
-
-/**
- * Listener method for link clicks.
- * 
- * @author Jonathan Locke
- */
-public interface ILinkListener extends IRequestListener
-{
-       /** Listener interface */
-       RequestListenerInterface INTERFACE = new RequestListenerInterface(
-               ILinkListener.class);
-}

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/link/InlineFrame.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/InlineFrame.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/InlineFrame.java
index 566bdae..0663620 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/InlineFrame.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/InlineFrame.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.markup.html.link;
 
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.Page;
 import org.apache.wicket.core.request.handler.IPageProvider;
 import org.apache.wicket.core.request.handler.PageProvider;
@@ -33,7 +34,7 @@ import 
org.apache.wicket.request.mapper.parameter.PageParameters;
  * 
  */
 
-public class InlineFrame extends WebMarkupContainer implements ILinkListener
+public class InlineFrame extends WebMarkupContainer implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -122,7 +123,7 @@ public class InlineFrame extends WebMarkupContainer 
implements ILinkListener
         */
        protected CharSequence getURL()
        {
-               return urlFor(ILinkListener.INTERFACE, new PageParameters());
+               return urlFor(new PageParameters());
        }
 
        /**
@@ -146,6 +147,12 @@ public class InlineFrame extends WebMarkupContainer 
implements ILinkListener
                super.onComponentTag(tag);
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * @see org.apache.wicket.markup.html.link.ILinkListener#onLinkClicked()
         */

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
index 413698c..cfc23ec 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/Link.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.link;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.IGenericComponent;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.lambda.WicketConsumer;
@@ -75,7 +76,7 @@ import org.apache.wicket.util.lang.Args;
  * @param <T>
  *            type of model object
  */
-public abstract class Link<T> extends AbstractLink implements ILinkListener, 
IGenericComponent<T, Link<T>>
+public abstract class Link<T> extends AbstractLink implements 
IRequestListener, IGenericComponent<T, Link<T>>
 {
        private static final long serialVersionUID = 1L;
 
@@ -177,6 +178,12 @@ public abstract class Link<T> extends AbstractLink 
implements ILinkListener, IGe
         */
        public abstract void onClick();
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return true;
+       }
+       
        /**
         * THIS METHOD IS NOT PART OF THE WICKET API. DO NOT ATTEMPT TO 
OVERRIDE OR CALL IT.
         * 
@@ -326,7 +333,7 @@ public abstract class Link<T> extends AbstractLink 
implements ILinkListener, IGe
         */
        protected CharSequence getURL()
        {
-               return urlFor(ILinkListener.INTERFACE, new PageParameters());
+               return urlFor(new PageParameters());
        }
 
        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ResourceLink.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ResourceLink.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ResourceLink.java
index b8bbff4..6e8e73d 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ResourceLink.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/ResourceLink.java
@@ -16,7 +16,7 @@
  */
 package org.apache.wicket.markup.html.link;
 
-import org.apache.wicket.IResourceListener;
+import org.apache.wicket.IRequestListener;
 import org.apache.wicket.request.cycle.RequestCycle;
 import 
org.apache.wicket.request.handler.resource.ResourceReferenceRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
@@ -31,7 +31,7 @@ import org.apache.wicket.request.resource.ResourceReference;
  * @param <T>
  *            type of model object
  */
-public class ResourceLink<T> extends Link<T> implements IResourceListener
+public class ResourceLink<T> extends Link<T> implements IRequestListener
 {
        private static final long serialVersionUID = 1L;
 
@@ -103,6 +103,12 @@ public class ResourceLink<T> extends Link<T> implements 
IResourceListener
        {
        }
 
+       @Override
+       public boolean includeRenderCount()
+       {
+               return false;
+       }
+       
        /**
         * @see org.apache.wicket.IResourceListener#onResourceRequested()
         */
@@ -142,6 +148,6 @@ public class ResourceLink<T> extends Link<T> implements 
IResourceListener
                        return getRequestCycle().urlFor(
                                new 
ResourceReferenceRequestHandler(resourceReference, resourceParameters));
                }
-               return urlFor(IResourceListener.INTERFACE, resourceParameters);
+               return urlFor(resourceParameters);
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/markup/html/link/StatelessLink.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/StatelessLink.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/StatelessLink.java
index 9a4a5c5..62e0581 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/link/StatelessLink.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/link/StatelessLink.java
@@ -50,8 +50,14 @@ public abstract class StatelessLink<T> extends Link<T>
        }
 
        @Override
+       public boolean includeRenderCount()
+       {
+               return false;
+       }
+       
+       @Override
        protected CharSequence getURL()
        {
-               return urlFor(ILinkListener.INTERFACE, 
getPage().getPageParameters());
+               return urlFor(getPage().getPageParameters());
        }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/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 e7d582a..8544339 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
@@ -40,8 +40,6 @@ import javax.servlet.ServletContext;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpSession;
 
-import junit.framework.AssertionFailedError;
-
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
 import org.apache.wicket.IPageManagerProvider;
@@ -50,7 +48,6 @@ import org.apache.wicket.IRequestCycleProvider;
 import org.apache.wicket.IRequestListener;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
-import org.apache.wicket.RequestListenerInterface;
 import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.WicketRuntimeException;
@@ -82,12 +79,10 @@ import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.IFormSubmitListener;
 import org.apache.wicket.markup.html.form.SubmitLink;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.ExternalLink;
-import org.apache.wicket.markup.html.link.ILinkListener;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.link.ResourceLink;
 import org.apache.wicket.markup.html.list.ListView;
@@ -140,6 +135,8 @@ import org.apache.wicket.util.visit.IVisitor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import junit.framework.AssertionFailedError;
+
 /**
  * A helper class to ease unit testing of Wicket applications without the need 
for a servlet
  * container. See javadoc of <code>WicketTester</code> for example usage. This 
class can be used as
@@ -1070,7 +1067,7 @@ public class BaseWicketTester
        {
                Args.notNull(link, "link");
 
-               Url url = Url.parse(link.urlFor(ILinkListener.INTERFACE, new 
PageParameters()).toString());
+               Url url = Url.parse(link.urlFor(new 
PageParameters()).toString());
                return transform(url).toString();
        }
 
@@ -1084,14 +1081,14 @@ public class BaseWicketTester
         * @param component
         * @param listener
         */
-       public void executeListener(final Component component, final 
RequestListenerInterface listener)
+       public void executeListener(final Component component)
        {
                Args.notNull(component, "component");
 
                // 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(
-                       component.getPage(), component), listener);
+                       component.getPage(), component));
 
                Url url = urlFor(handler);
                request.setUrl(url);
@@ -1110,39 +1107,19 @@ public class BaseWicketTester
         * @param component
         * @param listener
         */
-       public void invokeListener(final Component component, final 
RequestListenerInterface listener)
+       public void invokeListener(final Component component)
        {
                Args.notNull(component, "component");
 
                // 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(
-                       component.getPage(), component), listener);
+                       component.getPage(), component));
 
                processRequest(handler);
        }
 
        /**
-        * Builds and processes a request suitable for invoking a listener. The 
<code>Component</code>
-        * must implement any of the known <code>IListener</code> interfaces.
-        * 
-        * @param component
-        *            the listener to invoke
-        */
-       public void executeListener(final Component component)
-       {
-               Args.notNull(component, "component");
-
-               for (RequestListenerInterface iface : 
RequestListenerInterface.getRegisteredInterfaces())
-               {
-                       if 
(iface.getListenerInterfaceClass().isAssignableFrom(component.getClass()))
-                       {
-                               executeListener(component, iface);
-                       }
-               }
-       }
-
-       /**
         * Builds and processes a request suitable for executing an 
<code>AbstractAjaxBehavior</code>.
         * 
         * @param behavior
@@ -1988,7 +1965,7 @@ public class BaseWicketTester
                        }
                        else
                        {
-                               executeListener(link, ILinkListener.INTERFACE);
+                               executeListener(link);
                        }
                }
                // The link requires AJAX
@@ -2029,7 +2006,7 @@ public class BaseWicketTester
                Form<?> form = (Form<?>)getComponentFromLastRenderedPage(path);
                Url url = Url.parse(
                        form.getRootForm()
-                               .urlFor(IFormSubmitListener.INTERFACE, new 
PageParameters())
+                               .urlFor(new PageParameters())
                                .toString(), 
Charset.forName(request.getCharacterEncoding()));
 
                // make url absolute

http://git-wip-us.apache.org/repos/asf/wicket/blob/d1710298/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java 
b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
index 91c8890..ed18e0e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
@@ -35,7 +35,6 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
-import org.apache.wicket.markup.html.form.IOnChangeListener;
 import org.apache.wicket.markup.html.form.ListMultipleChoice;
 import org.apache.wicket.markup.html.form.Radio;
 import org.apache.wicket.markup.html.form.RadioGroup;
@@ -517,7 +516,7 @@ public class FormTester
                                boolean wantOnSelectionChangedNotifications = 
(Boolean)wantOnSelectionChangedNotificationsMethod.invoke(component);
                                if (wantOnSelectionChangedNotifications)
                                {
-                                       tester.invokeListener(component, 
IOnChangeListener.INTERFACE);
+                                       tester.invokeListener(component);
                                }
                        }
                        catch (final Exception x)

Reply via email to