You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/03/08 23:37:07 UTC

[26/52] [abbrv] wicket git commit: WICKET-6104 Rework AjaxFallback** components to use java.util.Optional for their #onEvent methods

WICKET-6104 Rework AjaxFallback** components to use java.util.Optional for their #onEvent methods


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

Branch: refs/heads/lambdas
Commit: ec1db0f3392b89af28c18889b11b76b43a4c768e
Parents: ae36388
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Fri Feb 26 14:16:22 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Fri Feb 26 14:16:22 2016 +0100

----------------------------------------------------------------------
 .../ajax/markup/html/AjaxFallbackLink.java      |  11 +-
 .../markup/html/form/AjaxFallbackButton.java    |   8 +-
 .../wicket/util/tester/BaseWicketTester.java    |   2 +-
 .../org/apache/wicket/MockPanelWithLink.java    |   6 +-
 .../wicket/ajax/AjaxHeaderContributionPage.java |  16 +--
 .../ajax/AjaxHeaderContributionPage2.java       |  22 ++--
 .../apache/wicket/ajax/DomReadyOrderPage.java   |   6 +-
 .../java/org/apache/wicket/ajax/HomePage.java   |   9 +-
 .../ajax/form/AjaxFormSubmitTestPage.java       |   4 +-
 .../ajax/markup/html/AjaxFallbackLinkTest.java  |   6 +-
 .../DoubleNestedTransparentContainerPage.java   |   9 +-
 ...inerWithSiblingTransparentContainerPage.java |   9 +-
 .../SingleNestedTransparentContainerPage.java   |  10 +-
 ...ntainerWithAutoTransparentContainerPage.java |   7 +-
 ...ainerWithManualTransparentContainerPage.java |   8 +-
 .../html/form/FormWithMultipleButtonsTest.java  |   5 +-
 .../util/tester/apps_5/AjaxLinkClickTest.java   |  11 +-
 .../wicket/util/tester/apps_6/LinkPage.java     |   6 +-
 .../diskstore/browser/BrowserPanel.java         |  15 +--
 .../devutils/inspector/EnhancedPageView.java    |  12 +--
 .../examples/ajax/builtin/EffectsPage.java      |  11 +-
 .../wicket/examples/ajax/builtin/LinksPage.java |   8 +-
 .../examples/ajax/builtin/RatingsPage.java      |   6 +-
 .../wicket/examples/ajax/builtin/TodoList.java  |  41 ++++----
 .../wicket/examples/source/SourcesPage.java     |   8 +-
 .../content/CheckedSelectableFolderContent.java |   8 +-
 .../tree/content/EditableFolderContent.java     |   8 +-
 .../content/MultiSelectableFolderContent.java   |  12 ++-
 .../tree/content/SelectableFolderContent.java   |  15 +--
 .../markup/html/IndicatingAjaxFallbackLink.java |   5 +-
 .../data/sort/AjaxFallbackOrderByBorder.java    |   4 +-
 .../data/sort/AjaxFallbackOrderByLink.java      |  64 +----------
 .../repeater/data/sort/AjaxOrderByLink.java     | 105 +++++++++++++++++++
 .../ajax/markup/html/tabs/AjaxTabbedPanel.java  |  16 ++-
 .../markup/html/repeater/tree/AbstractTree.java |   5 +-
 .../markup/html/repeater/tree/NestedTree.java   |  12 +--
 .../markup/html/repeater/tree/Node.java         |   4 +-
 .../markup/html/repeater/tree/TableTree.java    |   9 +-
 .../html/repeater/tree/content/Folder.java      |   7 +-
 .../repeater/tree/content/StyledLinkLabel.java  |  14 +--
 .../html/repeater/util/TreeModelProvider.java   |   3 +-
 .../wicket/extensions/rating/RatingPanel.java   |  20 ++--
 42 files changed, 314 insertions(+), 253 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
index 18488da..d4f95a3 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLink.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
@@ -39,7 +41,7 @@ import org.apache.wicket.model.IModel;
  * @param <T>
  *            type of model object
  */
-public abstract class AjaxFallbackLink<T> extends Link<T> implements IAjaxLink
+public abstract class AjaxFallbackLink<T> extends Link<T>
 {
 	/** */
 	private static final long serialVersionUID = 1L;
@@ -87,7 +89,7 @@ public abstract class AjaxFallbackLink<T> extends Link<T> implements IAjaxLink
 			@Override
 			protected void onEvent(AjaxRequestTarget target)
 			{
-				onClick(target);
+				onClick(Optional.of(target));
 			}
 
 			@Override
@@ -114,7 +116,7 @@ public abstract class AjaxFallbackLink<T> extends Link<T> implements IAjaxLink
 	@Override
 	public final void onClick()
 	{
-		onClick(null);
+		onClick(Optional.empty());
 	}
 
 	/**
@@ -124,8 +126,7 @@ public abstract class AjaxFallbackLink<T> extends Link<T> implements IAjaxLink
 	 * @param target
 	 *            ajax target if this linked was invoked using ajax, null otherwise
 	 */
-	@Override
-	public abstract void onClick(final AjaxRequestTarget target);
+	public abstract void onClick(final Optional<AjaxRequestTarget> target);
 
 	/**
 	 * Removes any inline 'onclick' attributes set by Link#onComponentTag(ComponentTag).

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
index 0d164fd..9f25d9b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ajax/markup/html/form/AjaxFallbackButton.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax.markup.html.form;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
@@ -71,7 +73,7 @@ public abstract class AjaxFallbackButton extends Button
 			@Override
 			protected void onSubmit(AjaxRequestTarget target)
 			{
-				AjaxFallbackButton.this.onSubmit(target, AjaxFallbackButton.this.getForm());
+				AjaxFallbackButton.this.onSubmit(Optional.ofNullable(target), AjaxFallbackButton.this.getForm());
 			}
 
 			@Override
@@ -138,7 +140,7 @@ public abstract class AjaxFallbackButton extends Button
 	{
 		if (getRequestCycle().find(AjaxRequestTarget.class) == null)
 		{
-			onSubmit(null, getForm());
+			onSubmit(Optional.empty(), getForm());
 		}
 	}
 
@@ -173,7 +175,7 @@ public abstract class AjaxFallbackButton extends Button
 	 *            ajax target if this linked was invoked using ajax, null otherwise
 	 * @param form
 	 */
-	protected void onSubmit(final AjaxRequestTarget target, final Form<?> form)
+	protected void onSubmit(final Optional<AjaxRequestTarget> target, final Form<?> form)
 	{
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/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 0242eb9..a5fb789 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
@@ -1924,7 +1924,7 @@ public class BaseWicketTester
 				(AjaxFormSubmitBehavior)WicketTesterHelper.findAjaxEventBehavior(link, "click"));
 		}
 		// if the link is an IAjaxLink, use it (do check if AJAX is expected)
-		else if (linkComponent instanceof IAjaxLink && isAjax)
+		else if (isAjax && (linkComponent instanceof IAjaxLink || linkComponent instanceof AjaxFallbackLink))
 		{
 			List<AjaxEventBehavior> behaviors = WicketTesterHelper.findAjaxEventBehaviors(
 				linkComponent, "click");

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java b/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
index ce20aca..083e888 100644
--- a/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
+++ b/wicket-core/src/test/java/org/apache/wicket/MockPanelWithLink.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.markup.IMarkupCacheKeyProvider;
@@ -46,9 +48,9 @@ public abstract class MockPanelWithLink extends Panel
 		add(new AjaxFallbackLink<Void>("link")
 		{
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				MockPanelWithLink.this.onLinkClick(target);
+				MockPanelWithLink.this.onLinkClick(targetOptional.orElse(null));
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage.java
index a7ccde9..feff1db 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.markup.html.WebPage;
@@ -43,13 +45,15 @@ public class AjaxHeaderContributionPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				target.prependJavaScript("prepend();");
-				target.add(test1);
-				target.add(test2);
-				target.add(test3);
-				target.appendJavaScript("append();");
+				targetOptional.ifPresent(target -> {
+					target.prependJavaScript("prepend();");
+					target.add(test1);
+					target.add(test2);
+					target.add(test3);
+					target.appendJavaScript("append();");
+				});
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage2.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage2.java b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage2.java
index 44c6d4f..398f036 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage2.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxHeaderContributionPage2.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.markup.html.WebPage;
@@ -50,16 +52,18 @@ public class AjaxHeaderContributionPage2 extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				target.prependJavaScript("prepend();");
-				target.add(test1);
-				target.add(test2);
-				target.add(test3);
-				target.add(btest1);
-				target.add(btest2);
-				target.add(btest3);
-				target.appendJavaScript("append();");
+				targetOptional.ifPresent(target -> {
+					target.prependJavaScript("prepend();");
+					target.add(test1);
+					target.add(test2);
+					target.add(test3);
+					target.add(btest1);
+					target.add(btest2);
+					target.add(btest3);
+					target.appendJavaScript("append();");
+				});
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/DomReadyOrderPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/DomReadyOrderPage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/DomReadyOrderPage.java
index 17670d3..27a6447 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/DomReadyOrderPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/DomReadyOrderPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebPage;
@@ -60,9 +62,9 @@ public class DomReadyOrderPage extends WebPage
 		}
 
 		@Override
-		public void onClick(AjaxRequestTarget target)
+		public void onClick(Optional<AjaxRequestTarget> targetOptional)
 		{
-			target.add(this);
+			targetOptional.ifPresent(target -> target.add(this));
 		}
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
index cf4d32f..190b0af 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/HomePage.java
@@ -18,6 +18,7 @@ package org.apache.wicket.ajax;
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -63,7 +64,7 @@ public class HomePage extends WebPage
 
 		};
 		add(form);
-		form.add(new TextField<String>("textfield", new Model<String>()));
+		form.add(new TextField<>("textfield", new Model<>()));
 		form.add(new Button("submit"));
 
 		final WebMarkupContainer listViewContainer = new WebMarkupContainer("listViewContainer");
@@ -77,7 +78,7 @@ public class HomePage extends WebPage
 				@Override
 				public List<Object> getObject()
 				{
-					List<Object> objects = new LinkedList<Object>();
+					List<Object> objects = new LinkedList<>();
 					for (int i = 0; i < rows; i++)
 					{
 						objects.add(new Object());
@@ -97,11 +98,11 @@ public class HomePage extends WebPage
 		form.add(new AjaxFallbackButton("addButton", form)
 		{
 			@Override
-			protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+			protected void onSubmit(Optional<AjaxRequestTarget> targetOptional, Form<?> form)
 			{
 				rows++;
 				listView.removeAll();
-				target.add(listViewContainer);
+				targetOptional.ifPresent(target -> target.add(listViewContainer));
 			}
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java
index acd7c36..b372395 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/form/AjaxFormSubmitTestPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax.form;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
 import org.apache.wicket.markup.html.WebPage;
@@ -76,7 +78,7 @@ public class AjaxFormSubmitTestPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+			protected void onSubmit(Optional<AjaxRequestTarget> target, Form<?> form)
 			{
 				formSubmitted = formSubmitted | BUTTON;
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLinkTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLinkTest.java
index ac047dc..0441436 100644
--- a/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLinkTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/ajax/markup/html/AjaxFallbackLinkTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
@@ -46,10 +48,10 @@ public class AjaxFallbackLinkTest extends WicketTestCase
 	{
 		private OnlyAnchorAreaAndLinkPage()
 		{
-			add(new AjaxFallbackLink("l") {
+			add(new AjaxFallbackLink<Void>("l") {
 
 				@Override
-				public void onClick(AjaxRequestTarget target)
+				public void onClick(Optional<AjaxRequestTarget> optional)
 				{
 				}
 			});

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerPage.java
index 651d85a..0008abd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerPage.java
@@ -16,10 +16,10 @@
  */
 package org.apache.wicket.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
-import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 
 /**
@@ -54,10 +54,9 @@ public class DoubleNestedTransparentContainerPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-					target.add(label);
+				targetOptional.ifPresent(target -> target.add(label));
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.java
index b5334a9..84d2bcd 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/DoubleNestedTransparentContainerWithSiblingTransparentContainerPage.java
@@ -16,10 +16,10 @@
  */
 package org.apache.wicket.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
-import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 
 /**
@@ -60,10 +60,9 @@ public class DoubleNestedTransparentContainerWithSiblingTransparentContainerPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-					target.add(label);
+				targetOptional.ifPresent(target -> target.add(label));
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/SingleNestedTransparentContainerPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/SingleNestedTransparentContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/SingleNestedTransparentContainerPage.java
index 877e9b6..3a514a5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/SingleNestedTransparentContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/SingleNestedTransparentContainerPage.java
@@ -16,11 +16,10 @@
  */
 package org.apache.wicket.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
-import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 
 /**
@@ -56,10 +55,9 @@ public class SingleNestedTransparentContainerPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-					target.add(label);
+				targetOptional.ifPresent(target -> target.add(label));
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithAutoTransparentContainerPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithAutoTransparentContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithAutoTransparentContainerPage.java
index 287adb4..eaad76b 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithAutoTransparentContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithAutoTransparentContainerPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -68,10 +70,9 @@ public class TransparentContainerWithAutoTransparentContainerPage extends WebPag
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-					target.add(label);
+				targetOptional.ifPresent(target -> target.add(label));
 			}
 		});
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithManualTransparentContainerPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithManualTransparentContainerPage.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithManualTransparentContainerPage.java
index f2c2303..29ed322 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithManualTransparentContainerPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/TransparentContainerWithManualTransparentContainerPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.html;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -74,11 +76,9 @@ public class TransparentContainerWithManualTransparentContainerPage extends WebP
 		{
 			private static final long serialVersionUID = 1L;
 
-			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-					target.add(label);
+				targetOptional.ifPresent(target -> target.add(label));
 			}
 		});
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java
index 3f94112..081efe2 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormWithMultipleButtonsTest.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.html.form;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -53,7 +54,7 @@ public class FormWithMultipleButtonsTest extends WicketTestCase
 	}
 
 	/**
-	 * @see href https://issues.apache.org/jira/browse/WICKET-1894
+	 * @see <a href="https://issues.apache.org/jira/browse/WICKET-1894">WICKET-1894</a>
 	 */
 	@Test
 	public void ajaxFallbackButtonInvokedFirst()
@@ -119,7 +120,7 @@ public class FormWithMultipleButtonsTest extends WicketTestCase
 				private static final long serialVersionUID = 1L;
 
 				@Override
-				protected void onSubmit(AjaxRequestTarget target, Form<?> form)
+				protected void onSubmit(Optional<AjaxRequestTarget> target, Form<?> form)
 				{
 					submitSequence.add(this);
 				}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
index 9e79501..8077100 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_5/AjaxLinkClickTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.util.tester.apps_5;
 
+import java.util.Optional;
+
 import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
@@ -89,11 +91,10 @@ public class AjaxLinkClickTest extends WicketTestCase
 		{
 			private static final long serialVersionUID = 1L;
 
-			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				linkClicked = true;
-				ajaxRequestTarget = target;
+				targetOptional.ifPresent(target -> ajaxRequestTarget = target);
 			}
 		});
 
@@ -119,10 +120,10 @@ public class AjaxLinkClickTest extends WicketTestCase
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				linkClicked = true;
-				ajaxRequestTarget = target;
+				targetOptional.ifPresent(target -> ajaxRequestTarget = target);
 			}
 		});
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
index 9e6dc21..6106327 100644
--- a/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
+++ b/wicket-core/src/test/java/org/apache/wicket/util/tester/apps_6/LinkPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.util.tester.apps_6;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -91,7 +93,7 @@ public class LinkPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				getRequestCycle().setResponsePage(ResultPage.class);
 			}
@@ -102,7 +104,7 @@ public class LinkPage extends WebPage
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				getRequestCycle().setResponsePage(new ResultPage("A special label"));
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
index 25358cc..51cd5f7 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/diskstore/browser/BrowserPanel.java
@@ -18,6 +18,7 @@ package org.apache.wicket.devutils.diskstore.browser;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
@@ -55,12 +56,9 @@ public class BrowserPanel extends Panel
 		AjaxFallbackLink<Void> refreshLink = new AjaxFallbackLink<Void>("refresh")
 		{
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				if (target != null)
-				{
-					target.add(table);
-				}
+				targetOptional.ifPresent(target -> target.add(table));
 			}
 		};
 		add(refreshLink);
@@ -68,13 +66,10 @@ public class BrowserPanel extends Panel
 		AjaxFallbackLink<Void> currentSessionLink = new AjaxFallbackLink<Void>("currentSessionLink")
 		{
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				sessionsSelector.setModelObject(getCurrentSession().getObject());
-				if (target != null)
-				{
-					target.add(sessionsSelector, table);
-				}
+				targetOptional.ifPresent(target -> target.add(sessionsSelector, table));
 			}
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java
index 0687f75..49fd4c1 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/inspector/EnhancedPageView.java
@@ -24,6 +24,7 @@ import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 import org.apache.wicket.Component;
@@ -307,12 +308,10 @@ public final class EnhancedPageView extends GenericPanel<Page>
 		{
 			private static final long serialVersionUID = 1L;
 
-			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				expandState.expandAll();
-				if (target != null)
-					target.add(componentTree);
+				targetOptional.ifPresent(target -> target.add(componentTree));
 			}
 		});
 		add(new AjaxFallbackLink<Void>("collapseAll")
@@ -320,11 +319,10 @@ public final class EnhancedPageView extends GenericPanel<Page>
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				expandState.collapseAll();
-				if (target != null)
-					target.add(componentTree);
+				targetOptional.ifPresent(target -> target.add(componentTree));
 			}
 		});
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EffectsPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EffectsPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EffectsPage.java
index e3763c7..e286584 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EffectsPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EffectsPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.ajax.builtin;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxChannel;
 import org.apache.wicket.ajax.AjaxChannel.Type;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -105,15 +107,14 @@ public class EffectsPage extends BasePage
 		add(new AjaxFallbackLink<Void>("c2-link")
 		{
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				counter2++;
-				if (target != null)
-				{
+				targetOptional.ifPresent(target -> {
 					target.add(c2);
 					target.appendJavaScript(String.format("jQuery('#%s').effect('highlight');",
-						c2.getMarkupId()));
-				}
+							c2.getMarkupId()));
+				});
 			}
 
 			@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
index d5d99cb..2dc80bf 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/LinksPage.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.examples.ajax.builtin;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.WicketRuntimeException;
@@ -97,17 +98,14 @@ public class LinksPage extends BasePage
 		add(new AjaxFallbackLink<Void>("c2-link")
 		{
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				counter2++;
 				// notice that for a fallback link we need to makesure the
 				// target is not null. if the target is null ajax failed and the
 				// fallback was used, so there is no need to do any ajax-related
 				// processing.
-				if (target != null)
-				{
-					target.add(c2);
-				}
+				targetOptional.ifPresent(target -> target.add(c2));
 			}
 		});
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
index 6ad0b40..44ad5e6 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/RatingsPage.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.ajax.builtin;
 
+import java.util.Optional;
+
 import org.apache.wicket.util.io.IClusterable;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.rating.RatingPanel;
@@ -181,7 +183,7 @@ public class RatingsPage extends BasePage
 			}
 
 			@Override
-			public void onRated(int rating, AjaxRequestTarget target)
+			public void onRated(int rating, Optional<AjaxRequestTarget> target)
 			{
 				RatingsPage.rating1.addRating(rating);
 			}
@@ -212,7 +214,7 @@ public class RatingsPage extends BasePage
 			}
 
 			@Override
-			public void onRated(int rating, AjaxRequestTarget target)
+			public void onRated(int rating, Optional<AjaxRequestTarget> target)
 			{
 				// make sure the user can't vote again
 				hasVoted = Boolean.TRUE;

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/TodoList.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/TodoList.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/TodoList.java
index 9c37a48..66cc50a 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/TodoList.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/TodoList.java
@@ -18,6 +18,7 @@ package org.apache.wicket.examples.ajax.builtin;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
@@ -165,7 +166,7 @@ public class TodoList extends BasePage
 		private boolean linkVisible = true;
 
 		/** Link for displaying the AddTodo form. */
-		private final class AddTodoLink extends AjaxFallbackLink
+		private final class AddTodoLink extends AjaxFallbackLink<Void>
 		{
 			/** Constructor. */
 			private AddTodoLink(String id)
@@ -176,13 +177,13 @@ public class TodoList extends BasePage
 			/**
 			 * onclick handler.
 			 * 
-			 * @param target
+			 * @param targetOptional
 			 *            the request target.
 			 */
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				onShowForm(target);
+				onShowForm(targetOptional);
 			}
 
 			/**
@@ -201,7 +202,7 @@ public class TodoList extends BasePage
 		 * Link for removing all completed todos from the list, this link follows the same
 		 * visibility rules as the add link.
 		 */
-		private final class RemoveCompletedTodosLink extends AjaxFallbackLink
+		private final class RemoveCompletedTodosLink extends AjaxFallbackLink<Void>
 		{
 			/**
 			 * Constructor.
@@ -214,13 +215,10 @@ public class TodoList extends BasePage
 				super(id);
 			}
 
-			/**
-			 * @see AjaxFallbackLink#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
-			 */
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				onRemoveCompletedTodos(target);
+				onRemoveCompletedTodos(targetOptional);
 			}
 
 			/**
@@ -318,19 +316,19 @@ public class TodoList extends BasePage
 		/**
 		 * Called then the add link was clicked, shows the form, and hides the link.
 		 * 
-		 * @param target
+		 * @param targetOptional
 		 *            the request target.
 		 */
-		void onShowForm(AjaxRequestTarget target)
+		void onShowForm(Optional<AjaxRequestTarget> targetOptional)
 		{
 			// toggle the visibility
 			linkVisible = false;
 
 			// redraw the add container.
-			target.add(this);
+			targetOptional.ifPresent(target -> target.add(this));
 		}
 
-		void onRemoveCompletedTodos(AjaxRequestTarget target)
+		void onRemoveCompletedTodos(Optional<AjaxRequestTarget> targetOptional)
 		{
 			List<TodoItem> ready = new ArrayList<>();
 			for (TodoItem todo : items)
@@ -342,11 +340,13 @@ public class TodoList extends BasePage
 			}
 			items.removeAll(ready);
 
-			// repaint our panel
-			target.add(this);
+			targetOptional.ifPresent(target -> {
+				// repaint our panel
+				target.add(this);
 
-			// repaint the listview as there was a new item added.
-			target.add(showItems);
+				// repaint the listview as there was a new item added.
+				target.add(showItems);
+			});
 		}
 
 		/**
@@ -413,11 +413,8 @@ public class TodoList extends BasePage
 
 		add(new AjaxFallbackLink<Void>("ajaxback")
 		{
-			/**
-			 * @see org.apache.wicket.ajax.markup.html.AjaxFallbackLink#onClick(org.apache.wicket.ajax.AjaxRequestTarget)
-			 */
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				setResponsePage(getPage());
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
index dd30e07..8632e9d 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/source/SourcesPage.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.List;
+import java.util.Optional;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 
@@ -293,15 +294,14 @@ public class SourcesPage extends WebPage
 						item.getModel())
 					{
 						@Override
-						public void onClick(AjaxRequestTarget target)
+						public void onClick(Optional<AjaxRequestTarget> targetOptional)
 						{
 							setName(getDefaultModelObjectAsString());
 
-							if (target != null)
-							{
+							targetOptional.ifPresent(target -> {
 								target.add(codePanel);
 								target.add(filename);
-							}
+							});
 						}
 
 						@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/CheckedSelectableFolderContent.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/CheckedSelectableFolderContent.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/CheckedSelectableFolderContent.java
index 0fab470..8310fe8 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/CheckedSelectableFolderContent.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/CheckedSelectableFolderContent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.examples.tree.Foo;
@@ -75,9 +77,9 @@ public class CheckedSelectableFolderContent extends SelectableFolderContent
 			}
 
 			@Override
-			protected void onClick(AjaxRequestTarget target)
+			protected void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				CheckedSelectableFolderContent.this.select(getModelObject(), tree, target);
+				CheckedSelectableFolderContent.this.select(getModelObject(), tree, targetOptional);
 			}
 
 			@Override
@@ -87,4 +89,4 @@ public class CheckedSelectableFolderContent extends SelectableFolderContent
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/EditableFolderContent.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/EditableFolderContent.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/EditableFolderContent.java
index e202bae..280857b 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/EditableFolderContent.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/EditableFolderContent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -72,7 +74,7 @@ public class EditableFolderContent extends Content
 			@Override
 			protected Component newLabelComponent(String id, final IModel<Foo> model)
 			{
-				return new AjaxEditableLabel<String>(id, new PropertyModel<String>(model, "bar"))
+				return new AjaxEditableLabel<String>(id, new PropertyModel<>(model, "bar"))
 				{
 					@Override
 					protected void onSubmit(AjaxRequestTarget target)
@@ -82,10 +84,10 @@ public class EditableFolderContent extends Content
 						/**
 						 * update whole node in case we're located inside TableTree
 						 */
-						tree.updateNode(model.getObject(), target);
+						tree.updateNode(model.getObject(), Optional.of(target));
 					}
 				};
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiSelectableFolderContent.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiSelectableFolderContent.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiSelectableFolderContent.java
index 0c36fa5..2e70744 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiSelectableFolderContent.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/MultiSelectableFolderContent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.examples.tree.Foo;
@@ -51,7 +53,7 @@ public class MultiSelectableFolderContent extends Content
 		return selected.contains(foo);
 	}
 
-	protected void toggle(Foo foo, AbstractTree<Foo> tree, final AjaxRequestTarget target)
+	protected void toggle(Foo foo, AbstractTree<Foo> tree, final Optional<AjaxRequestTarget> targetOptional)
 	{
 		if (isSelected(foo))
 		{
@@ -62,7 +64,7 @@ public class MultiSelectableFolderContent extends Content
 			selected.add(foo);
 		}
 
-		tree.updateNode(foo, target);
+		tree.updateNode(foo, targetOptional);
 	}
 
 	@Override
@@ -82,9 +84,9 @@ public class MultiSelectableFolderContent extends Content
 			}
 
 			@Override
-			protected void onClick(AjaxRequestTarget target)
+			protected void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				MultiSelectableFolderContent.this.toggle(getModelObject(), tree, target);
+				MultiSelectableFolderContent.this.toggle(getModelObject(), tree, targetOptional);
 			}
 
 			@Override
@@ -94,4 +96,4 @@ public class MultiSelectableFolderContent extends Content
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/SelectableFolderContent.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/SelectableFolderContent.java b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/SelectableFolderContent.java
index b2605d5..caafcae 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/SelectableFolderContent.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/tree/content/SelectableFolderContent.java
@@ -16,8 +16,11 @@
  */
 package org.apache.wicket.examples.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.examples.tree.Foo;
 import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree;
 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
@@ -64,11 +67,11 @@ public class SelectableFolderContent extends Content
 		}
 	}
 
-	protected void select(Foo foo, AbstractTree<Foo> tree, final AjaxRequestTarget target)
+	protected void select(Foo foo, AbstractTree<Foo> tree, final Optional<AjaxRequestTarget> targetOptional)
 	{
 		if (selected != null)
 		{
-			tree.updateNode(selected.getObject(), target);
+			tree.updateNode(selected.getObject(), targetOptional);
 
 			selected.detach();
 			selected = null;
@@ -76,7 +79,7 @@ public class SelectableFolderContent extends Content
 
 		selected = provider.model(foo);
 
-		tree.updateNode(foo, target);
+		tree.updateNode(foo, targetOptional);
 	}
 
 	@Override
@@ -96,9 +99,9 @@ public class SelectableFolderContent extends Content
 			}
 
 			@Override
-			protected void onClick(AjaxRequestTarget target)
+			protected void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				SelectableFolderContent.this.select(getModelObject(), tree, target);
+				SelectableFolderContent.this.select(getModelObject(), tree, targetOptional);
 			}
 
 			@Override
@@ -108,4 +111,4 @@ public class SelectableFolderContent extends Content
 			}
 		};
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxFallbackLink.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxFallbackLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxFallbackLink.java
index 47df05f..133e273 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxFallbackLink.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/IndicatingAjaxFallbackLink.java
@@ -35,11 +35,8 @@ public abstract class IndicatingAjaxFallbackLink<T> extends AjaxFallbackLink<T>
 	implements
 		IAjaxIndicatorAware
 {
-
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = 1L;
+
 	private final AjaxIndicatorAppender indicatorAppender = new AjaxIndicatorAppender();
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
index d35433b..e91c949 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByBorder.java
@@ -55,7 +55,7 @@ public abstract class AjaxFallbackOrderByBorder<S> extends OrderByBorder<S>
 	@Override
 	protected OrderByLink<S> newOrderByLink(String id, S property, ISortStateLocator<S> stateLocator)
 	{
-		return new AjaxFallbackOrderByLink<S>("orderByLink", property, stateLocator)
+		return new AjaxOrderByLink<S>("orderByLink", property, stateLocator)
 		{
 			private static final long serialVersionUID = 1L;
 
@@ -93,6 +93,4 @@ public abstract class AjaxFallbackOrderByBorder<S> extends OrderByBorder<S>
 	}
 
 	protected abstract void onAjaxClick(AjaxRequestTarget target);
-
-
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
index e937e72..503d226 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxFallbackOrderByLink.java
@@ -16,10 +16,6 @@
  */
 package org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort;
 
-import org.apache.wicket.ajax.AjaxEventBehavior;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.markup.html.IAjaxLink;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink;
 
@@ -34,13 +30,11 @@ import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink;
  * @since 1.2.1
  * 
  * @author Igor Vaynberg (ivaynberg)
- * 
+ * @deprecated Use {@link AjaxOrderByLink} instead
  */
-public abstract class AjaxFallbackOrderByLink<S> extends OrderByLink<S> implements IAjaxLink
+@Deprecated
+public abstract class AjaxFallbackOrderByLink<S> extends AjaxOrderByLink<S>
 {
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = 1L;
 
 	/**
@@ -55,56 +49,4 @@ public abstract class AjaxFallbackOrderByLink<S> extends OrderByLink<S> implemen
 	{
 		super(id, sortProperty, stateLocator);
 	}
-
-	@Override
-	public void onInitialize()
-	{
-		super.onInitialize();
-
-		add(newAjaxEventBehavior("click"));
-	}
-
-	/**
-	 * @param event
-	 *            the name of the default event on which this link will listen to
-	 * @return the ajax behavior which will be executed when the user clicks the link
-	 */
-	protected AjaxEventBehavior newAjaxEventBehavior(final String event)
-	{
-		return new AjaxEventBehavior(event)
-		{
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			protected void onEvent(final AjaxRequestTarget target)
-			{
-				onClick();
-				AjaxFallbackOrderByLink.this.onClick(target);
-			}
-
-			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
-			{
-				super.updateAjaxAttributes(attributes);
-				attributes.setPreventDefault(true);
-
-				AjaxFallbackOrderByLink.this.updateAjaxAttributes(attributes);
-			}
-		};
-	}
-
-	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
-	{
-	}
-
-	/**
-	 * Callback method when an ajax click occurs. All the behavior of changing the sort, etc is
-	 * already performed before this is called so this method should primarily be used to configure
-	 * the target.
-	 * 
-	 * @param target
-	 */
-	@Override
-	public abstract void onClick(AjaxRequestTarget target);
-
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxOrderByLink.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxOrderByLink.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxOrderByLink.java
new file mode 100644
index 0000000..ecca89c
--- /dev/null
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/sort/AjaxOrderByLink.java
@@ -0,0 +1,105 @@
+/*
+ * 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.extensions.ajax.markup.html.repeater.data.sort;
+
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.markup.html.IAjaxLink;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByLink;
+
+
+/**
+ * Ajaxified {@link OrderByLink}
+ *
+ * @param <S>
+ *            the type of the sort property
+ * @see OrderByLink
+ */
+public abstract class AjaxOrderByLink<S> extends OrderByLink<S> implements IAjaxLink
+{
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor
+	 *
+	 * @param id
+	 * @param sortProperty
+	 * @param stateLocator
+	 */
+	public AjaxOrderByLink(final String id, final S sortProperty,
+	                       final ISortStateLocator<S> stateLocator)
+	{
+		super(id, sortProperty, stateLocator);
+	}
+
+	@Override
+	public void onInitialize()
+	{
+		super.onInitialize();
+
+		add(newAjaxEventBehavior("click"));
+	}
+
+	/**
+	 * @param event
+	 *            the name of the default event on which this link will listen to
+	 * @return the ajax behavior which will be executed when the user clicks the link
+	 */
+	protected AjaxEventBehavior newAjaxEventBehavior(final String event)
+	{
+		return new AjaxEventBehavior(event)
+		{
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(final AjaxRequestTarget target)
+			{
+				onClick();
+				AjaxOrderByLink.this.onClick(target);
+			}
+
+			@Override
+			protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
+			{
+				super.updateAjaxAttributes(attributes);
+				attributes.setPreventDefault(true);
+
+				AjaxOrderByLink.this.updateAjaxAttributes(attributes);
+			}
+		};
+	}
+
+	protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
+	{
+	}
+
+	/**
+	 * Callback method when an ajax click occurs. All the behavior of changing the sort, etc is
+	 * already performed before this is called so this method should primarily be used to configure
+	 * the target.
+	 * 
+	 * @param target
+	 */
+	@Override
+	public abstract void onClick(AjaxRequestTarget target);
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/tabs/AjaxTabbedPanel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/tabs/AjaxTabbedPanel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/tabs/AjaxTabbedPanel.java
index e3e0e6f..db08078 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/tabs/AjaxTabbedPanel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/tabs/AjaxTabbedPanel.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.extensions.ajax.markup.html.tabs;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
@@ -72,20 +73,15 @@ public class AjaxTabbedPanel<T extends ITab> extends TabbedPanel<T>
 	{
 		return new AjaxFallbackLink<Void>(linkId)
 		{
-
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(final AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				setSelectedTab(index);
-				if (target != null)
-				{
-					target.add(AjaxTabbedPanel.this);
-				}
-				onAjaxUpdate(target);
+				targetOptional.ifPresent(target -> target.add(AjaxTabbedPanel.this));
+				onAjaxUpdate(targetOptional);
 			}
-
 		};
 	}
 
@@ -97,11 +93,11 @@ public class AjaxTabbedPanel<T extends ITab> extends TabbedPanel<T>
 	 * <strong>Note</strong> Since an {@link AjaxFallbackLink} is used to back the ajax update the
 	 * <code>target</code> argument can be null when the client browser does not support ajax and
 	 * the fallback mode is used. See {@link AjaxFallbackLink} for details.
-	 * 
+	 *
 	 * @param target
 	 *            ajax target used to update this component
 	 */
-	protected void onAjaxUpdate(final AjaxRequestTarget target)
+	protected void onAjaxUpdate(final Optional<AjaxRequestTarget> target)
 	{
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/AbstractTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/AbstractTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/AbstractTree.java
index 439c0c7..2bcf921 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/AbstractTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/AbstractTree.java
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.tree;
 
+import java.util.Optional;
 import java.util.Set;
 
 import org.apache.wicket.Component;
@@ -314,12 +315,12 @@ public abstract class AbstractTree<T> extends Panel implements IGenericComponent
 	 * @param target
 	 *            request target or {@code null}
 	 */
-	public abstract void updateNode(T node, final IPartialPageRequestHandler target);
+	public abstract void updateNode(T node, final Optional<? extends IPartialPageRequestHandler> target);
 
 	/**
 	 * The state of a node.
 	 */
-	public static enum State {
+	public enum State {
 		/**
 		 * The node is collapsed, i.e. its children are not iterated.
 		 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
index 41dfa79..f41be80 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/NestedTree.java
@@ -16,10 +16,10 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.tree;
 
+import java.util.Optional;
 import java.util.Set;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.repeater.tree.nested.BranchItem;
 import org.apache.wicket.extensions.markup.html.repeater.tree.nested.Subtree;
@@ -37,7 +37,6 @@ import org.apache.wicket.util.visit.IVisitor;
  */
 public abstract class NestedTree<T> extends AbstractTree<T>
 {
-
 	private static final long serialVersionUID = 1L;
 
 	/**
@@ -89,7 +88,7 @@ public abstract class NestedTree<T> extends AbstractTree<T>
 	/**
 	 * Overridden to let the node output its markup id.
 	 * 
-	 * @see #updateNode(Object, IPartialPageRequestHandler)
+	 * @see #updateNode(Object, Optional<IPartialPageRequestHandler>)
 	 * @see Component#setOutputMarkupId(boolean)
 	 */
 	@Override
@@ -132,10 +131,9 @@ public abstract class NestedTree<T> extends AbstractTree<T>
 	 * Overridden to update the corresponding {@link Node} only.
 	 */
 	@Override
-	public void updateNode(T node, final IPartialPageRequestHandler target)
+	public void updateNode(T node, final Optional<? extends IPartialPageRequestHandler> targetOptional)
 	{
-		if (target != null)
-		{
+		targetOptional.ifPresent(target -> {
 			final IModel<T> model = getProvider().model(node);
 			visitChildren(Node.class, new IVisitor<Node<T>, Void>()
 			{
@@ -152,7 +150,7 @@ public abstract class NestedTree<T> extends AbstractTree<T>
 				}
 			});
 			model.detach();
-		}
+		});
 	}
 
 	private class RootsModel extends AbstractReadOnlyModel<T>

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/Node.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/Node.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/Node.java
index 26c0685..e48a34c 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/Node.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/Node.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.tree;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -115,7 +117,7 @@ public abstract class Node<T> extends Panel
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
 				toggle();
 			}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
index 01d00c1..df61813 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/TableTree.java
@@ -17,9 +17,9 @@
 package org.apache.wicket.extensions.markup.html.repeater.tree;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
-import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
@@ -184,10 +184,9 @@ public abstract class TableTree<T, S> extends AbstractTree<T>
 	 * For an update of a node the complete row item is added to the ART.
 	 */
 	@Override
-	public void updateNode(T t, final IPartialPageRequestHandler target)
+	public void updateNode(T t, final Optional<? extends IPartialPageRequestHandler> targetOptional)
 	{
-		if (target != null)
-		{
+		targetOptional.ifPresent(target -> {
 			final IModel<T> model = getProvider().model(t);
 			visitChildren(Item.class, new IVisitor<Item<T>, Void>()
 			{
@@ -207,7 +206,7 @@ public abstract class TableTree<T, S> extends AbstractTree<T>
 				}
 			});
 			model.detach();
-		}
+		});
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/Folder.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/Folder.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/Folder.java
index ee8159f..8130d72 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/Folder.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/Folder.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.util.string.CssUtils;
 import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree;
@@ -28,13 +30,12 @@ import org.apache.wicket.model.IModel;
  * 
  * The link is used to expand/collapse the tree depending on the {@link State} of the current node.
  * Nodes without children are not clickable. Subclasses may change this behavior by overriding
- * {@link #isClickable()} and {@link #onClick(AjaxRequestTarget)}.
+ * {@link #isClickable()} and {@link #onClick(Optional<AjaxRequestTarget>)}.
  * 
  * @author svenmeier
  */
 public class Folder<T> extends StyledLinkLabel<T>
 {
-
 	private static final long serialVersionUID = 1L;
 
 	public static final String OTHER_CSS_CLASS_KEY = CssUtils.key(Folder.class, "other");
@@ -71,7 +72,7 @@ public class Folder<T> extends StyledLinkLabel<T>
 	 * Toggle the node's {@link State} on click.
 	 */
 	@Override
-	protected void onClick(AjaxRequestTarget target)
+	protected void onClick(Optional<AjaxRequestTarget> targetOptional)
 	{
 		T t = getModelObject();
 		if (tree.getState(t) == State.EXPANDED)

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/StyledLinkLabel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/StyledLinkLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/StyledLinkLabel.java
index a26c6d3..3d2bd25 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/StyledLinkLabel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/tree/content/StyledLinkLabel.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.markup.html.repeater.tree.content;
 
+import java.util.Optional;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -66,10 +68,10 @@ public abstract class StyledLinkLabel<T> extends Panel
 	 * Hook method to create a new link component.
 	 * 
 	 * This default implementation returns an {@link AjaxFallbackLink} which invokes
-	 * {@link #onClick(AjaxRequestTarget)} only if {@link #isClickable()} returns <code>true</code>.
+	 * {@link #onClick(Optional<AjaxRequestTarget>)} only if {@link #isClickable()} returns <code>true</code>.
 	 * 
 	 * @see #isClickable()
-	 * @see #onClick(AjaxRequestTarget)
+	 * @see #onClick(Optional<AjaxRequestTarget>)
 	 */
 	protected MarkupContainer newLinkComponent(String id, IModel<T> model)
 	{
@@ -84,9 +86,9 @@ public abstract class StyledLinkLabel<T> extends Panel
 			}
 
 			@Override
-			public void onClick(AjaxRequestTarget target)
+			public void onClick(Optional<AjaxRequestTarget> targetOptional)
 			{
-				StyledLinkLabel.this.onClick(target);
+				StyledLinkLabel.this.onClick(targetOptional);
 			}
 		};
 	}
@@ -140,7 +142,7 @@ public abstract class StyledLinkLabel<T> extends Panel
 	 * @see #newLinkComponent(String, IModel)
 	 * @see #isClickable()
 	 */
-	protected void onClick(AjaxRequestTarget target)
+	protected void onClick(Optional<AjaxRequestTarget> target)
 	{
 	}
 
@@ -163,4 +165,4 @@ public abstract class StyledLinkLabel<T> extends Panel
 			}
 		}
 	}
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/TreeModelProvider.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/TreeModelProvider.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/TreeModelProvider.java
index 15a9251..c95ff29 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/TreeModelProvider.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/util/TreeModelProvider.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Optional;
 
 import javax.swing.event.TreeModelEvent;
 import javax.swing.event.TreeModelListener;
@@ -189,7 +190,7 @@ public abstract class TreeModelProvider<T> implements ITreeProvider<T>
 			{
 				for (T object : nodeUpdates)
 				{
-					tree.updateNode(object, target);
+					tree.updateNode(object, Optional.of(target));
 				}
 			}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/ec1db0f3/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
index 4b4753b..528305b 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/rating/RatingPanel.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.extensions.rating;
 
+import java.util.Optional;
+
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -38,7 +40,7 @@ import org.apache.wicket.request.resource.ResourceReference;
 
 /**
  * Rating component that generates a number of stars where a user can click on to rate something.
- * Subclasses should implement {@link #onRated(int, org.apache.wicket.ajax.AjaxRequestTarget)} to provide the calculation
+ * Subclasses should implement {@link #onRated(int, Optional)} to provide the calculation
  * of the rating, and {@link #onIsStarActive(int)} to indicate whether to render an active star or
  * an inactive star.
  * <p>
@@ -119,7 +121,7 @@ public abstract class RatingPanel extends Panel
 				private static final long serialVersionUID = 1L;
 
 				@Override
-				public void onClick(final AjaxRequestTarget target)
+				public void onClick(Optional<AjaxRequestTarget> targetOptional)
 				{
 					LoopItem item = (LoopItem)getParent();
 
@@ -127,13 +129,11 @@ public abstract class RatingPanel extends Panel
 					// of our rating component, so other components can also get
 					// updated in case of an AJAX event.
 
-					onRated(item.getIndex() + 1, target);
+					onRated(item.getIndex() + 1, targetOptional);
 
 					// if we process an AJAX event, update this panel
-					if (target != null)
-					{
-						target.add(RatingPanel.this.get("rater"));
-					}
+					targetOptional.ifPresent(target -> target.add(RatingPanel.this.get("rater")));
+
 				}
 
 				@Override
@@ -427,11 +427,9 @@ public abstract class RatingPanel extends Panel
 	 * Notification of a click on a rating star. Add your own components to the request target when
 	 * you want to have them updated in the Ajax request. <strong>NB</strong> the target may be null
 	 * when the click isn't handled using AJAX, but using a fallback scenario.
-	 * 
-	 * @param rating
+	 *  @param rating
 	 *            the number of the star that is clicked, ranging from 1 to nrOfStars
 	 * @param target
-	 *            the request target, null if the request is a regular, non-AJAX request.
 	 */
-	protected abstract void onRated(int rating, AjaxRequestTarget target);
+	protected abstract void onRated(int rating, Optional<AjaxRequestTarget> target);
 }