You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/03/13 09:25:34 UTC

[causeway] branch master updated: CAUSEWAY-3372: [Wicket Viewer] Void action return should always result in a (current) page reload.

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/master by this push:
     new fcc1cfe2b7 CAUSEWAY-3372: [Wicket Viewer] Void action return should always result in a (current) page reload.
fcc1cfe2b7 is described below

commit fcc1cfe2b7e11aec8cc77e015a09301d654b6d70
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Mar 13 10:25:28 2023 +0100

    CAUSEWAY-3372: [Wicket Viewer] Void action return should always result
    in a (current) page reload.
---
 .../commons/model/components/UiComponentType.java  |  4 +-
 .../models/{VoidModel.java => EmptyModel.java}     | 33 +++++-----------
 viewers/wicket/ui/src/main/java/module-info.java   |  4 +-
 .../ActionResultResponseHandlingStrategy.java      | 12 ------
 .../actionresponse/ActionResultResponseType.java   | 46 ++++++++++++++++------
 .../EmptyReturnPanel.html}                         |  0
 .../EmptyReturnPanel.java}                         |  6 +--
 .../EmptyReturnPanelFactory.java}                  | 10 ++---
 .../EmptyReturnPage.css}                           |  0
 .../EmptyReturnPage.html}                          |  0
 .../EmptyReturnPage.java}                          | 16 ++++----
 .../ComponentFactoryRegistrarDefault.java          |  8 ++--
 .../registries/pages/PageClassListDefault.java     |  8 ++--
 13 files changed, 73 insertions(+), 74 deletions(-)

diff --git a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
index e7c3762b61..f1e7de7655 100644
--- a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
+++ b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/components/UiComponentType.java
@@ -134,9 +134,9 @@ public enum UiComponentType {
      */
     EMPTY_COLLECTION,
     /**
-     * A void result from an action.
+     * A <code>null</code> result from an action.
      */
-    VOID_RETURN,
+    EMPTY_RETURN,
     /**
      * A list of models, rendered as a list of links.
      */
diff --git a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/VoidModel.java b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EmptyModel.java
similarity index 62%
rename from viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/VoidModel.java
rename to viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EmptyModel.java
index 8fc2ef1b2f..66b091b074 100644
--- a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/VoidModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/EmptyModel.java
@@ -21,16 +21,17 @@ package org.apache.causeway.viewer.wicket.model.models;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 
-
+import lombok.Getter;
+import lombok.Setter;
 
 /**
- * Represents the result of invoking a <tt>void</tt> action.
+ * Represents the result of invoking an action that returns <code>null</code>.
  */
-public class VoidModel extends ModelAbstract<Void> {
+public class EmptyModel extends ModelAbstract<Void> {
 
     private static final long serialVersionUID = 1L;
 
-    public VoidModel(final MetaModelContext commonContext) {
+    public EmptyModel(final MetaModelContext commonContext) {
         super(commonContext);
     }
 
@@ -39,25 +40,11 @@ public class VoidModel extends ModelAbstract<Void> {
         return null;
     }
 
-
-    // //////////////////////////////////////
-
-    private ActionModel actionModelHint;
-    /**
-     * The {@link ActionModelImpl model} of the {@link ObjectAction action}
-     * that generated this {@link VoidModel}.
-     *
-     * @see #setActionHint(ActionModelImpl)
-     */
-    public ActionModel getActionModelHint() {
-        return actionModelHint;
-    }
     /**
-     * Called by action.
-     *
-     * @see #getActionModelHint()
+     * The {@link ActionModel model} of the {@link ObjectAction action}
+     * that generated this {@link EmptyModel}.
      */
-    public void setActionHint(final ActionModel actionModelHint) {
-        this.actionModelHint = actionModelHint;
-    }
+    @Getter @Setter
+    private ActionModel actionHint;
+
 }
diff --git a/viewers/wicket/ui/src/main/java/module-info.java b/viewers/wicket/ui/src/main/java/module-info.java
index 599fffc521..e36033aab3 100644
--- a/viewers/wicket/ui/src/main/java/module-info.java
+++ b/viewers/wicket/ui/src/main/java/module-info.java
@@ -35,7 +35,7 @@ module org.apache.causeway.viewer.wicket.ui {
     exports org.apache.causeway.viewer.wicket.ui.pages.common.fontawesome;
     exports org.apache.causeway.viewer.wicket.ui.components.propertyheader;
     exports org.apache.causeway.viewer.wicket.ui.components.widgets.links;
-    exports org.apache.causeway.viewer.wicket.ui.components.voidreturn;
+    exports org.apache.causeway.viewer.wicket.ui.components.emptyreturn;
     exports org.apache.causeway.viewer.wicket.ui.app.logout;
     exports org.apache.causeway.viewer.wicket.ui.components.property;
     exports org.apache.causeway.viewer.wicket.ui.pages.common.bootstrap.css;
@@ -64,7 +64,7 @@ module org.apache.causeway.viewer.wicket.ui {
     exports org.apache.causeway.viewer.wicket.ui.components.widgets.breadcrumbs;
     exports org.apache.causeway.viewer.wicket.ui.components.bookmarkedpages;
     exports org.apache.causeway.viewer.wicket.ui.pages.common.livequery.js;
-    exports org.apache.causeway.viewer.wicket.ui.pages.voidreturn;
+    exports org.apache.causeway.viewer.wicket.ui.pages.emptyreturn;
     exports org.apache.causeway.viewer.wicket.ui.pages.accmngt.password_reset;
     exports org.apache.causeway.viewer.wicket.ui.components.scalars;
     exports org.apache.causeway.viewer.wicket.ui.pages;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
index 63fd2027e3..66114717cb 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
@@ -34,20 +34,8 @@ import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.viewer.wicket.model.models.RedirectRequestHandlerWithOpenUrlStrategy;
-import org.apache.causeway.viewer.wicket.model.models.VoidModel;
-import org.apache.causeway.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 
 public enum ActionResultResponseHandlingStrategy {
-    REDIRECT_TO_VOID {
-        @Override
-        public void handleResults(
-                final MetaModelContext commonContext,
-                final ActionResultResponse resultResponse) {
-
-            final RequestCycle requestCycle = RequestCycle.get();
-            requestCycle.setResponsePage(new VoidReturnPage(new VoidModel(commonContext)));
-        }
-    },
     REDIRECT_TO_PAGE {
         @Override
         public void handleResults(
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 744c0d06d0..f71a495f53 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -22,6 +22,8 @@ import java.net.URL;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.cycle.PageRequestHandlerTracker;
+import org.apache.wicket.request.cycle.RequestCycle;
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.value.Blob;
@@ -30,6 +32,7 @@ import org.apache.causeway.applib.value.LocalResourcePath;
 import org.apache.causeway.applib.value.OpenUrlStrategy;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.assertions._Assert;
+import org.apache.causeway.commons.internal.base._Casts;
 import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
@@ -38,15 +41,15 @@ import org.apache.causeway.core.metamodel.object.ManagedObjects;
 import org.apache.causeway.core.metamodel.object.PackedManagedObject;
 import org.apache.causeway.core.security.authentication.logout.LogoutMenu.LoginRedirect;
 import org.apache.causeway.viewer.wicket.model.models.ActionModel;
+import org.apache.causeway.viewer.wicket.model.models.EmptyModel;
 import org.apache.causeway.viewer.wicket.model.models.EntityCollectionModelStandalone;
 import org.apache.causeway.viewer.wicket.model.models.PageType;
 import org.apache.causeway.viewer.wicket.model.models.ValueModel;
-import org.apache.causeway.viewer.wicket.model.models.VoidModel;
 import org.apache.causeway.viewer.wicket.ui.pages.PageClassRegistry;
+import org.apache.causeway.viewer.wicket.ui.pages.emptyreturn.EmptyReturnPage;
 import org.apache.causeway.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.causeway.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
 import org.apache.causeway.viewer.wicket.ui.pages.value.ValuePage;
-import org.apache.causeway.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 
 import lombok.NonNull;
 import lombok.SneakyThrows;
@@ -183,7 +186,8 @@ public enum ActionResultResponseType {
             return ActionResultResponse.withHandler(handler);
         }
     },
-    VOID {
+    /** render the 'empty page' */
+    EMPTY {
         @Override
         public ActionResultResponse interpretResult(
                 final ActionModel actionModel,
@@ -191,9 +195,24 @@ public enum ActionResultResponseType {
                 final @Nullable ManagedObject resultAdapter, // arg is not used
                 final Can<ManagedObject> args) {
             final var commonContext = actionModel.getMetaModelContext();
-            final VoidModel voidModel = new VoidModel(commonContext);
-            voidModel.setActionHint(actionModel);
-            return ActionResultResponse.toPage(VoidReturnPage.class, new VoidReturnPage(voidModel));
+            final EmptyModel emptyModel = new EmptyModel(commonContext);
+            emptyModel.setActionHint(actionModel);
+            return ActionResultResponse.toPage(EmptyReturnPage.class, new EmptyReturnPage(emptyModel));
+        }
+    },
+    /**
+     * Issues a (current) page reload.
+     */
+    VOID {
+        @Override
+        public ActionResultResponse interpretResult(
+                final ActionModel actionModel,
+                final AjaxRequestTarget target,
+                final @Nullable ManagedObject resultAdapter, // arg is not used
+                final Can<ManagedObject> args) {
+            val currentPage = PageRequestHandlerTracker.getLastHandler(RequestCycle.get()).getPage();
+            val pageClass = currentPage.getClass();
+            return ActionResultResponse.toPage(PageRedirectRequest.forPage(pageClass, _Casts.uncheckedCast(currentPage)));
         }
     },
     SIGN_IN {
@@ -229,8 +248,8 @@ public enum ActionResultResponseType {
             final @Nullable ManagedObject resultAdapter,
             final Can<ManagedObject> args) {
 
-        val typeAndAdapter = determineFor(resultAdapter, targetIfAny);
-        return typeAndAdapter.type // mapped to VOID if adapter is unspecified or null
+        val typeAndAdapter = determineFor(resultAdapter, targetIfAny, model.getAction().getElementType().isVoid());
+        return typeAndAdapter.type // mapped to EMPTY if adapter is unspecified or null
                 .interpretResult(model, targetIfAny, typeAndAdapter.resultAdapter, args);
     }
 
@@ -267,12 +286,17 @@ public enum ActionResultResponseType {
 
     private static TypeAndAdapter determineFor(
             final ManagedObject resultAdapter,
-            final AjaxRequestTarget targetIfAny) {
+            final AjaxRequestTarget targetIfAny,
+            final boolean isActionWithVoidReturn) {
 
-        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(resultAdapter)) {
+        if(isActionWithVoidReturn) {
             return TypeAndAdapter.of(ActionResultResponseType.VOID, resultAdapter);
         }
 
+        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(resultAdapter)) {
+            return TypeAndAdapter.of(ActionResultResponseType.EMPTY, resultAdapter);
+        }
+
         val resultSpec = resultAdapter.getSpecification();
         if (!(resultAdapter instanceof PackedManagedObject)) {
 
@@ -319,7 +343,7 @@ public enum ActionResultResponseType {
             case 1:
                 val firstElement = unpacked.getFirstElseFail();
                 // recursively unwrap
-                return determineFor(firstElement, targetIfAny);
+                return determineFor(firstElement, targetIfAny, false);
             default:
                 return TypeAndAdapter.of(ActionResultResponseType.COLLECTION, resultAdapter);
             }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanel.html b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanel.html
similarity index 100%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanel.html
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanel.html
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanel.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanel.java
similarity index 87%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanel.java
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanel.java
index fa8ae30067..c997c2280f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanel.java
@@ -16,18 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.wicket.ui.components.voidreturn;
+package org.apache.causeway.viewer.wicket.ui.components.emptyreturn;
 
 import org.apache.wicket.model.IModel;
 
 import org.apache.causeway.viewer.wicket.ui.panels.PanelAbstract;
 
-public class VoidReturnPanel
+public class EmptyReturnPanel
 extends PanelAbstract<Void, IModel<Void>> {
 
     private static final long serialVersionUID = 1L;
 
-    public VoidReturnPanel(final String id) {
+    public EmptyReturnPanel(final String id) {
         super(id);
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanelFactory.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanelFactory.java
similarity index 83%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanelFactory.java
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanelFactory.java
index a92b54637a..0908ad1a36 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/voidreturn/VoidReturnPanelFactory.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/emptyreturn/EmptyReturnPanelFactory.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.wicket.ui.components.voidreturn;
+package org.apache.causeway.viewer.wicket.ui.components.emptyreturn;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
@@ -28,12 +28,12 @@ import org.apache.causeway.viewer.wicket.ui.ComponentFactoryAbstract;
 /**
  * {@link ComponentFactory} to represent an action that returns void.
  */
-public class VoidReturnPanelFactory extends ComponentFactoryAbstract {
+public class EmptyReturnPanelFactory extends ComponentFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    public VoidReturnPanelFactory() {
-        super(UiComponentType.VOID_RETURN, VoidReturnPanel.class);
+    public EmptyReturnPanelFactory() {
+        super(UiComponentType.EMPTY_RETURN, EmptyReturnPanel.class);
     }
 
     @Override
@@ -43,7 +43,7 @@ public class VoidReturnPanelFactory extends ComponentFactoryAbstract {
 
     @Override
     public Component createComponent(final String id, final IModel<?> model) {
-        return new VoidReturnPanel(id);
+        return new EmptyReturnPanel(id);
     }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.css
similarity index 100%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.css
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.html
similarity index 100%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.html
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.java
similarity index 81%
rename from viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
rename to viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.java
index a9fcdb16ce..297c05e993 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/emptyreturn/EmptyReturnPage.java
@@ -16,14 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.wicket.ui.pages.voidreturn;
+package org.apache.causeway.viewer.wicket.ui.pages.emptyreturn;
 
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 
 import org.apache.causeway.applib.services.user.UserMemento;
 import org.apache.causeway.viewer.commons.model.components.UiComponentType;
 import org.apache.causeway.viewer.wicket.model.models.ActionModel;
-import org.apache.causeway.viewer.wicket.model.models.VoidModel;
+import org.apache.causeway.viewer.wicket.model.models.EmptyModel;
 import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils;
 import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.causeway.viewer.wicket.ui.util.Wkt;
@@ -32,18 +32,18 @@ import org.apache.causeway.viewer.wicket.ui.util.Wkt;
  * Web page representing an action invocation.
  */
 @AuthorizeInstantiation(UserMemento.AUTHORIZED_USER_ROLE)
-public class VoidReturnPage extends PageAbstract {
+public class EmptyReturnPage extends PageAbstract {
 
     private static final long serialVersionUID = 1L;
 
     private static final String ID_ACTION_NAME = "actionName";
 
-    public VoidReturnPage(final VoidModel model) {
+    public EmptyReturnPage(final EmptyModel model) {
         this(model, actionNameFrom(model));
     }
 
-    private VoidReturnPage(final VoidModel model, final String actionName) {
-        super(PageParameterUtils.newPageParameters(), actionName, UiComponentType.VOID_RETURN);
+    private EmptyReturnPage(final EmptyModel model, final String actionName) {
+        super(PageParameterUtils.newPageParameters(), actionName, UiComponentType.EMPTY_RETURN);
 
         Wkt.labelAdd(themeDiv, ID_ACTION_NAME, actionName);
 
@@ -51,8 +51,8 @@ public class VoidReturnPage extends PageAbstract {
         addBookmarkedPages(themeDiv);
     }
 
-    private static String actionNameFrom(final VoidModel model) {
-        ActionModel actionModel = model.getActionModelHint();
+    private static String actionNameFrom(final EmptyModel model) {
+        ActionModel actionModel = model.getActionHint();
         if(actionModel != null) {
             return actionModel.getFriendlyName();
         }
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index bda9f59ba2..4e076bf8b0 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -52,6 +52,7 @@ import org.apache.causeway.viewer.wicket.ui.components.collectioncontents.multip
 import org.apache.causeway.viewer.wicket.ui.components.collectioncontents.summary.CollectionContentsAsSummaryFactory;
 import org.apache.causeway.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsHiddenPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.empty.EmptyCollectionPanelFactory;
+import org.apache.causeway.viewer.wicket.ui.components.emptyreturn.EmptyReturnPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.entity.collection.EntityCollectionPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.entity.header.EntityHeaderPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanelFactory;
@@ -79,7 +80,6 @@ import org.apache.causeway.viewer.wicket.ui.components.standalonecollection.Stan
 import org.apache.causeway.viewer.wicket.ui.components.tree.TreePanelFactories;
 import org.apache.causeway.viewer.wicket.ui.components.unknown.UnknownModelPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.value.StandaloneValuePanelFactory;
-import org.apache.causeway.viewer.wicket.ui.components.voidreturn.VoidReturnPanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.welcome.WelcomePanelFactory;
 import org.apache.causeway.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanelFactory;
 
@@ -151,7 +151,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         addComponentFactoriesForEmptyCollection(componentFactories);
         addComponentFactoriesForScalar(componentFactories);
         addComponentFactoriesForEntityLink(componentFactories);
-        addComponentFactoriesForVoidReturn(componentFactories);
+        addComponentFactoriesForEmptyReturn(componentFactories);
         addComponentFactoriesForValue(componentFactories);
         addComponentFactoriesForParameters(componentFactories);
         addComponentFactoriesForBreadcrumbs(componentFactories);
@@ -236,8 +236,8 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
         componentFactories.add(new EntityLinkSimplePanelFactory());
     }
 
-    protected void addComponentFactoriesForVoidReturn(final ComponentFactoryList componentFactories) {
-        componentFactories.add(new VoidReturnPanelFactory());
+    protected void addComponentFactoriesForEmptyReturn(final ComponentFactoryList componentFactories) {
+        componentFactories.add(new EmptyReturnPanelFactory());
     }
 
     protected void addComponentFactoriesForActionInfo(final ComponentFactoryList componentFactories) {
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/pages/PageClassListDefault.java b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
index 9a4d052bcf..632e4fbfbf 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/causeway/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
@@ -33,12 +33,12 @@ import org.apache.causeway.viewer.wicket.ui.pages.about.AboutPage;
 import org.apache.causeway.viewer.wicket.ui.pages.accmngt.password_reset.PasswordResetPage;
 import org.apache.causeway.viewer.wicket.ui.pages.accmngt.register.RegisterPage;
 import org.apache.causeway.viewer.wicket.ui.pages.accmngt.signup.RegistrationFormPage;
+import org.apache.causeway.viewer.wicket.ui.pages.emptyreturn.EmptyReturnPage;
 import org.apache.causeway.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.causeway.viewer.wicket.ui.pages.home.HomePage;
 import org.apache.causeway.viewer.wicket.ui.pages.login.WicketSignInPage;
 import org.apache.causeway.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
 import org.apache.causeway.viewer.wicket.ui.pages.value.ValuePage;
-import org.apache.causeway.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 
 /**
  * Default implementation of {@link PageClassList}, specifying the default pages
@@ -64,7 +64,7 @@ public class PageClassListDefault implements PageClassList {
         pageRegistry.registerPage(PageType.HOME_AFTER_PAGETIMEOUT, getHomePageClass());
         pageRegistry.registerPage(PageType.STANDALONE_COLLECTION, getStandaloneCollectionPageClass());
         pageRegistry.registerPage(PageType.VALUE, getValuePageClass());
-        pageRegistry.registerPage(PageType.VOID_RETURN, getVoidReturnPageClass());
+        pageRegistry.registerPage(PageType.VOID_RETURN, getEmptyReturnPageClass());
     }
 
 
@@ -92,8 +92,8 @@ public class PageClassListDefault implements PageClassList {
     /**
      * For subclassing if required.
      */
-    protected Class<? extends Page> getVoidReturnPageClass() {
-        return VoidReturnPage.class;
+    protected Class<? extends Page> getEmptyReturnPageClass() {
+        return EmptyReturnPage.class;
     }
 
     /**