You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/11/29 15:02:13 UTC

[3/3] git commit: ISIS-618: value and void returns now also delegate to separate pages

ISIS-618: value and void returns now also delegate to separate pages

... ie VoidReturnPage and ValuePage.

ActionPage renamed to ActoinPromptPage.

In addition, the logic in StandaloneValuePanel, handling blobs vs clobs vs urls,
is now moved earlier into ActionPromptPage.

Also, got rid of ActionPage.SingleResultMode, since no need to render results inline.

Also, removed (partially implemented) support for the rendering of transient objects;
will fail fast.  (Previously Wicket viewer would render the object, but didn't
provide a save button.  So clearly this feature isn't being used).

Also: added some hackery to BookmarkPagesModel, to protect against earlier failures
corrupting the rootNodeList (preventing any subsequent ability to use the app).


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

Branch: refs/heads/master
Commit: 7353305d8192c6fe34e557a466362b53a5a00a2c
Parents: 981662d
Author: Dan Haywood <da...@apache.org>
Authored: Fri Nov 29 13:39:17 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Nov 29 13:39:47 2013 +0000

----------------------------------------------------------------------
 .../wicket/viewer/IsisWicketApplication.java    |   4 +-
 .../registries/pages/PageClassListDefault.java  |  20 +-
 ...ClassListDefault_RegistrationAndCaching.java |   2 +-
 .../viewer/wicket/model/models/ActionModel.java |  62 +++---
 .../model/models/BookmarkedPagesModel.java      |  30 ++-
 .../viewer/wicket/model/models/EntityModel.java |   2 +-
 .../viewer/wicket/model/models/PageType.java    |   4 +-
 .../viewer/wicket/model/models/ValueModel.java  |  22 +++
 .../viewer/wicket/model/models/VoidModel.java   |  61 ++++++
 .../isis/viewer/wicket/ui/ComponentType.java    |  15 +-
 .../ui/components/actions/ActionPanel.html      |  10 -
 .../ui/components/actions/ActionPanel.java      | 198 +++++++++----------
 .../components/actions/ActionPanelFactory.java  |   2 +-
 .../cssmenu/AppActionsCssMenuLinkFactory.java   |   2 +-
 .../entity/EntityActionLinkFactory.java         |  41 +---
 .../entity/header/EntityHeaderPanel.java        |   2 +-
 .../components/value/StandaloneValuePanel.java  |  36 +---
 .../viewer/wicket/ui/pages/PageAbstract.css     |  40 ++--
 .../wicket/ui/pages/action/ActionPromptPage.css |  18 --
 .../ui/pages/action/ActionPromptPage.html       |  38 ----
 .../ui/pages/action/ActionPromptPage.java       |  68 -------
 .../ui/pages/actionprompt/ActionPromptPage.css  |  18 ++
 .../ui/pages/actionprompt/ActionPromptPage.html |  38 ++++
 .../ui/pages/actionprompt/ActionPromptPage.java |  66 +++++++
 .../viewer/wicket/ui/pages/home/HomePage.html   |   2 +-
 .../viewer/wicket/ui/pages/home/HomePage.java   |  14 +-
 .../StandaloneCollectionPage.java               |  23 +--
 .../viewer/wicket/ui/pages/value/ValuePage.css  |  25 +++
 .../viewer/wicket/ui/pages/value/ValuePage.html |  43 ++++
 .../viewer/wicket/ui/pages/value/ValuePage.java |  70 +++++++
 .../ui/pages/voidreturn/VoidReturnPage.css      |  25 +++
 .../ui/pages/voidreturn/VoidReturnPage.html     |  43 ++++
 .../ui/pages/voidreturn/VoidReturnPage.java     |  67 +++++++
 .../metamodel/spec/feature/ObjectAction.java    |   6 +-
 34 files changed, 700 insertions(+), 417 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index e4f9313..d5610f3 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -255,8 +255,8 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
             });
 
             // prettier URLs
-            mountPage("/entity/${objectOid}/", PageType.ENTITY);
-            mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/${actionSingleResultsMode}/#{actionArgs}", PageType.ACTION_PROMPT);
+            mountPage("/entity/${objectOid}", PageType.ENTITY);
+            mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/#{actionArgs}", PageType.ACTION_PROMPT);
             
         } catch(RuntimeException ex) {
             // because Wicket's handling in its WicketFilter (that calls this method) does not log the exception.

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
index cde4e8c..fd54221 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
@@ -27,11 +27,13 @@ import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistrySpi;
 import org.apache.isis.viewer.wicket.ui.pages.about.AboutPage;
-import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
+import org.apache.isis.viewer.wicket.ui.pages.actionprompt.ActionPromptPage;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
 import org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage;
 import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
+import org.apache.isis.viewer.wicket.ui.pages.value.ValuePage;
+import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 
 /**
  * Default implementation of {@link PageClassList}, specifying the default pages
@@ -48,6 +50,8 @@ public class PageClassListDefault implements PageClassList {
         pageRegistry.registerPage(PageType.HOME, getHomePageClass());
         pageRegistry.registerPage(PageType.ACTION_PROMPT, getActionPromptPageClass());
         pageRegistry.registerPage(PageType.STANDALONE_COLLECTION, getStandaloneCollectionPageClass());
+        pageRegistry.registerPage(PageType.VALUE, getValuePageClass());
+        pageRegistry.registerPage(PageType.VOID_RETURN, getVoidReturnPageClass());
     }
 
     /**
@@ -70,10 +74,24 @@ public class PageClassListDefault implements PageClassList {
     protected Class<? extends Page> getStandaloneCollectionPageClass() {
         return StandaloneCollectionPage.class;
     }
+    
+    /**
+     * For subclassing if required.
+     */
+    protected Class<? extends Page> getValuePageClass() {
+        return ValuePage.class;
+    }
 
     /**
      * For subclassing if required.
      */
+    protected Class<? extends Page> getVoidReturnPageClass() {
+        return VoidReturnPage.class;
+    }
+    
+    /**
+     * For subclassing if required.
+     */
     protected Class<? extends Page> getSignInPageClass() {
         return WicketSignInPage.class;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java b/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
index 217c249..6d17907 100644
--- a/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
+++ b/component/viewer/wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
@@ -30,7 +30,7 @@ import org.junit.Test;
 
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
-import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
+import org.apache.isis.viewer.wicket.ui.pages.actionprompt.ActionPromptPage;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 71bb67b..0ba71dd 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -27,6 +27,7 @@ import java.util.regex.Pattern;
 
 import com.google.common.collect.Maps;
 
+import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.Identifier;
@@ -66,35 +67,27 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
      * Whether we are obtaining arguments (eg in a dialog), or displaying the
      * results
      */
-    public enum Mode {
-        PARAMETERS, RESULTS
+    private enum Mode {
+        PARAMETERS, 
+        RESULTS
     }
 
-    /**
-     * How to handle results when only a single result is returned
-     */
-    public enum SingleResultsMode {
-        /**
-         * Render a simple link, using "entityLink"
-         */
-        LINK,
-        /**
-         * Render the object directly, using "entity"
-         */
-        INLINE,
-        /**
-         * Redirect to <tt>EntityPage</tt>.
-         */
-        REDIRECT
-    }
 
     
     //////////////////////////////////////////////////
     // Factory methods
     //////////////////////////////////////////////////
 
-    public static ActionModel create(final ObjectAdapterMemento targetAdapter, final ActionMemento action, final Mode mode, final SingleResultsMode singleResultsMode) {
-        return new ActionModel(targetAdapter, action, mode, singleResultsMode);
+    /**
+     * @param objectAdapter
+     * @param action
+     * @return
+     */
+    public static IModel<?> create(ObjectAdapter objectAdapter, ObjectAction action) {
+        final ObjectAdapterMemento serviceMemento = ObjectAdapterMemento.Functions.fromAdapter().apply(objectAdapter);
+        final ActionMemento homePageActionMemento = ObjectAdapterMemento.Functions.fromAction().apply(action);
+        final Mode mode = action.getParameterCount() > 0? Mode.PARAMETERS : Mode.RESULTS;
+        return (IModel<?>) new ActionModel(serviceMemento, homePageActionMemento, mode);
     }
 
     public static ActionModel createForPersistent(final PageParameters pageParameters) {
@@ -107,12 +100,10 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
      * see {@link #ActionModel(PageParameters)}
      */
     public static PageParameters createPageParameters(
-            final ObjectAdapter adapter, final ObjectAction objectAction, final SingleResultsMode singleResultsMode, final ConcurrencyChecking concurrencyChecking) {
+            final ObjectAdapter adapter, final ObjectAction objectAction, final ConcurrencyChecking concurrencyChecking) {
         
         final PageParameters pageParameters = new PageParameters();
         
-        PageParameterNames.ACTION_SINGLE_RESULTS_MODE.addEnumTo(pageParameters, singleResultsMode);
-        
         final String oidStr = concurrencyChecking == ConcurrencyChecking.CHECK?
                 adapter.getOid().enString(getOidMarshaller()):
                 adapter.getOid().enStringNoVersion(getOidMarshaller());
@@ -182,7 +173,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         final ObjectAdapter adapter = getTargetAdapter();
         final ObjectAction objectAction = getActionMemento().getAction();
         final PageParameters pageParameters = createPageParameters(
-                adapter, objectAction, SingleResultsMode.INLINE, ConcurrencyChecking.NO_CHECK);
+                adapter, objectAction, ConcurrencyChecking.NO_CHECK);
 
         // capture argument values
         final ObjectAdapter[] argumentsAsArray = getArgumentsAsArray();
@@ -251,7 +242,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     private final ObjectAdapterMemento targetAdapterMemento;
     private final ActionMemento actionMemento;
     private Mode actionMode;
-    private final SingleResultsMode singleResultsMode;
+
 
     /**
      * Lazily populated in {@link #getArgumentModel(ActionParameterMemento)}
@@ -260,7 +251,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     private ActionExecutor executor;
 
     private ActionModel(final PageParameters pageParameters) {
-        this(newObjectAdapterMementoFrom(pageParameters), newActionMementoFrom(pageParameters), actionModeFrom(pageParameters), PageParameterNames.ACTION_SINGLE_RESULTS_MODE.getEnumFrom(pageParameters, SingleResultsMode.class));
+        this(newObjectAdapterMementoFrom(pageParameters), newActionMementoFrom(pageParameters), actionModeFrom(pageParameters));
 
         setArgumentsIfPossible(pageParameters);
         setContextArgumentIfPossible(pageParameters);
@@ -298,11 +289,10 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     }
 
 
-    private ActionModel(final ObjectAdapterMemento adapterMemento, final ActionMemento actionMemento, final Mode actionMode, final SingleResultsMode singleResultsMode) {
+    private ActionModel(final ObjectAdapterMemento adapterMemento, final ActionMemento actionMemento, final Mode actionMode) {
         this.targetAdapterMemento = adapterMemento;
         this.actionMemento = actionMemento;
         this.actionMode = actionMode;
-        this.singleResultsMode = singleResultsMode;
     }
 
     private void setArgumentsIfPossible(final PageParameters pageParameters) {
@@ -317,6 +307,10 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         }
     }
 
+    public boolean hasParameters() {
+        return actionMode == ActionModel.Mode.PARAMETERS;
+    }
+
     private boolean setContextArgumentIfPossible(final PageParameters pageParameters) {
         final String paramContext = PageParameterNames.ACTION_PARAM_CONTEXT.getStringFrom(pageParameters);
         if (paramContext == null) {
@@ -404,10 +398,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         return actionMemento.getConcurrencyChecking();
     }
 
-    public Mode getActionMode() {
-        return actionMode;
-    }
-
     public ActionMemento getActionMemento() {
         return actionMemento;
     }
@@ -468,10 +458,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
         this.executor = executor;
     }
 
-    public SingleResultsMode getSingleResultsMode() {
-        return singleResultsMode;
-    }
-
     public void reset() {
         this.actionMode = determineMode(actionMemento.getAction());
     }
@@ -503,4 +489,6 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> {
     }
 
 
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
index de66095..3c23f24 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkedPagesModel.java
@@ -20,6 +20,7 @@
 package org.apache.isis.viewer.wicket.model.models;
 
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import com.google.common.base.Objects;
@@ -28,6 +29,7 @@ import com.google.common.collect.Lists;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
@@ -43,7 +45,14 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
     
     public void bookmarkPage(final BookmarkableModel<?> bookmarkableModel) {
 
+        // hack: remove any garbage that might've got stored in 'rootNodes'
+        cleanUpGarbage(rootNodes);
+        
         final PageParameters candidatePP = bookmarkableModel.getPageParameters();
+        if(!holdsOid(candidatePP)) {
+            // ignore
+            return;
+        }
 
         boolean foundInGraph = false;
         for (BookmarkTreeNode eachNode : rootNodes) {
@@ -58,7 +67,6 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
             Collections.sort(rootNodes, COMPARATOR);
             current = candidatePP;
         }
-
         return;
     }
 
@@ -75,6 +83,26 @@ public class BookmarkedPagesModel extends ModelAbstract<List<? extends BookmarkT
         return Objects.equal(current, pageParameters);
     }
 
+    private static void cleanUpGarbage(List<BookmarkTreeNode> rootNodes) {
+        final Iterator<BookmarkTreeNode> iter = rootNodes.iterator();
+        while(iter.hasNext()) {
+            BookmarkTreeNode node = iter.next();
+            PageParameters pp = node.getPageParameters();
+            if(!holdsOid(pp)) {
+                iter.remove();
+            }
+        }
+    }
+
+    private static boolean holdsOid(PageParameters pp) {
+        try {
+            RootOid oidFrom = oidFrom(pp);
+            return oidFrom != null;
+        } catch(Exception ex) {
+            return false;
+        }
+    }
+    
     public static RootOid oidFrom(final PageParameters pageParameters) {
         String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
         if(oidStr == null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 370736e..8060c35 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -70,7 +70,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
 
         final PageParameters pageParameters = new PageParameters();
 
-        final Boolean persistent = adapter.representsPersistent();
+        final Boolean persistent = adapter != null && adapter.representsPersistent();
 
         if (persistent) {
             final String oidStr = adapter.getOid().enStringNoVersion(getOidMarshaller());

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
index 96687ae..9058a05 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
@@ -35,5 +35,7 @@ public enum PageType {
     ABOUT, 
     ENTITY, 
     ACTION_PROMPT,
-    STANDALONE_COLLECTION;
+    STANDALONE_COLLECTION,
+    VALUE,
+    VOID_RETURN;
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index b8879b5..9ddd054 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 
 /**
@@ -41,4 +42,25 @@ public class ValueModel extends ModelAbstract<ObjectAdapter> {
         return adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
     }
 
+    // //////////////////////////////////////
+
+    private ActionModel actionModelHint;
+    /**
+     * The {@link ActionModel model} of the {@link ObjectAction action} 
+     * that generated this {@link ValueModel}.
+     * 
+     * @see #setActionHint(ActionModel)
+     */
+    public ActionModel getActionModelHint() {
+        return actionModelHint;
+    }
+    /**
+     * Called by action.
+     * 
+     * @see #getActionModelHint()
+     */
+    public void setActionHint(ActionModel actionModelHint) {
+        this.actionModelHint = actionModelHint;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/VoidModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/VoidModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/VoidModel.java
new file mode 100644
index 0000000..c0437d3
--- /dev/null
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/VoidModel.java
@@ -0,0 +1,61 @@
+/*
+ *  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.isis.viewer.wicket.model.models;
+
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+
+
+/**
+ * Represents the result of invoking a <tt>void</tt> action.
+ */
+public class VoidModel extends ModelAbstract<Void> {
+
+    private static final long serialVersionUID = 1L;
+
+    public VoidModel() {
+    }
+
+    @Override
+    protected Void load() {
+        return null;
+    }
+
+
+    // //////////////////////////////////////
+
+    private ActionModel actionModelHint;
+    /**
+     * The {@link ActionModel model} of the {@link ObjectAction action} 
+     * that generated this {@link VoidModel}.
+     * 
+     * @see #setActionHint(ActionModel)
+     */
+    public ActionModel getActionModelHint() {
+        return actionModelHint;
+    }
+    /**
+     * Called by action.
+     * 
+     * @see #getActionModelHint()
+     */
+    public void setActionHint(ActionModel actionModelHint) {
+        this.actionModelHint = actionModelHint;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
index 2547adf..cfea54e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/ComponentType.java
@@ -99,20 +99,9 @@ public enum ComponentType {
      */
     ACTION_INFO,
     /**
-     * Used for two different (but related) types of components:
-     * <ul>
-     * <li>For a menu panel, to display list of available actions ('find
-     * using').</li>
-     * <li>The parameters or results of an action; the model indicates which to
-     * display.</li>
-     * </ul>
-     * 
-     * <p>
-     * If showing results, then provides a level of indirection around another
-     * view (eg {@link #ACTION_PARAMETERS}, {@link #ENTITY} or
-     * {@link #COLLECTION_NAME_AND_CONTENTS}).
+     * Used to display the parameters of an action.
      */
-    ACTION,
+    ACTION_PROMPT,
     /**
      * Top-level component for rendering a standalone collection (ie as returned by
      * an action).

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.html
index c3f7e65..d41b7b7 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.html
@@ -32,16 +32,6 @@
                 </div>
 				<span wicket:id="parameters">
 				</span>
-				<span wicket:id="entityLink">
-				</span>
-				<span wicket:id="entity">
-				</span>
-				<span wicket:id="emptyCollection">
-				</span>
-				<span wicket:id="value">
-				</span>
-				<span wicket:id="voidReturn">
-				</span>
 			</div>
 		</wicket:panel>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
index 545d269..a5bce11 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanel.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.components.actions;
 
-import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 
@@ -30,17 +29,25 @@ import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.http.handler.RedirectRequestHandler;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.StringResourceStream;
 
 import org.apache.isis.applib.ApplicationException;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.applib.value.Clob;
 import org.apache.isis.core.commons.authentication.MessageBroker;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.viewer.wicket.model.isis.PersistenceSessionProvider;
@@ -51,11 +58,13 @@ import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
+import org.apache.isis.viewer.wicket.model.models.VoidModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
+import org.apache.isis.viewer.wicket.ui.pages.value.ValuePage;
+import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
@@ -73,20 +82,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
 
     private static final long serialVersionUID = 1L;
 
-    
-    /**
-     * The various component types, one of which will be rendered.
-     * 
-     * @see #hideAllBut(ComponentType)
-     */
-    private static final List<ComponentType> COMPONENT_TYPES = Arrays.asList(
-            ComponentType.PARAMETERS, 
-            ComponentType.ENTITY_LINK, 
-            ComponentType.ENTITY, 
-            ComponentType.VALUE, 
-            ComponentType.EMPTY_COLLECTION, 
-            ComponentType.VOID_RETURN);
-
     private static final String ID_ACTION_NAME = "actionName";
 
     public ActionPanel(final String id, final ActionModel actionModel) {
@@ -96,7 +91,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
     }
 
     private void buildGui(final ActionModel actionModel) {
-        if (actionModel.getActionMode() == ActionModel.Mode.PARAMETERS) {
+        if (actionModel.hasParameters()) {
             buildGuiForParameters(actionModel);
         } else {
             executeActionAndProcessResults(null);
@@ -114,7 +109,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         try {
             targetAdapter = getActionModel().getTargetAdapter();
             
-            hideAllBut(ComponentType.PARAMETERS, ComponentType.ENTITY_ICON_AND_TITLE);
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PARAMETERS, getActionModel());
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_ICON_AND_TITLE, new EntityModel(targetAdapter));
 
@@ -308,81 +302,38 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         }
     }
 
-
-    private ApplicationException getApplicationExceptionIfAny(Exception ex) {
-        Iterable<ApplicationException> appEx = Iterables.filter(Throwables.getCausalChain(ex), ApplicationException.class);
-        Iterator<ApplicationException> iterator = appEx.iterator();
-        return iterator.hasNext() ? iterator.next() : null;
-    }
-
-
     enum ResultType {
         OBJECT {
             @Override
             public void addResults(final ActionPanel actionPanel, final ObjectAdapter resultAdapter) {
                 final ObjectAdapter actualAdapter = determineActualAdapter(resultAdapter, actionPanel);
-
-                //actionPanel.set
-                addResultsAccordingToSingleResultsMode(actionPanel, actualAdapter, null);
+                redirectToEntityPage(actionPanel, actualAdapter, null);
             }
 
             @Override
             public void addResults(ActionPanel actionPanel, ObjectAdapter targetAdapter, ConcurrencyException ex) {
-                addResultsAccordingToSingleResultsMode(actionPanel, targetAdapter, ex);
-            }
-
-            private ObjectAdapter determineActualAdapter(final ObjectAdapter resultAdapter, final PersistenceSessionProvider psa) {
-                ObjectAdapter actualAdapter;
-                if (resultAdapter.getSpecification().isNotCollection()) {
-                    actualAdapter = resultAdapter;
-                } else {
-                    // will only be a single element
-                    final List<Object> pojoList = asList(resultAdapter);
-                    final Object pojo = pojoList.get(0);
-                    actualAdapter = adapterFor(pojo, psa);
-                }
-                return actualAdapter;
+                redirectToEntityPage(actionPanel, targetAdapter, ex);
             }
 
-            private void addResultsAccordingToSingleResultsMode(final ActionPanel panel, final ObjectAdapter actualAdapter, ConcurrencyException exIfAny) {
+            private void redirectToEntityPage(final ActionPanel panel, final ObjectAdapter actualAdapter, ConcurrencyException exIfAny) {
                 panel.permanentlyHide(ID_ACTION_NAME);
-                final ActionModel actionModel = panel.getActionModel();
-                final ActionModel.SingleResultsMode singleResultsMode = actionModel.getSingleResultsMode();
 
-                if (singleResultsMode == ActionModel.SingleResultsMode.REDIRECT) {
-
-                    // force any changes in state etc to happen now prior to the redirect;
-                    // this should cause our page mementos (eg EntityModel) to hold the correct state.  I hope.
-                    panel.getTransactionManager().flushTransaction();
-                    
-                    // build page, also propagate any concurrency exception that might have occurred already
-                    final EntityPage entityPage = new EntityPage(actualAdapter, exIfAny);
-                    
-                    // "redirect-after-post"
-                    panel.setResponsePage(entityPage);
-                    
-                } else if (singleResultsMode == ActionModel.SingleResultsMode.INLINE) {
-                    final ComponentType componentType = ComponentType.ENTITY;
-                    panel.hideAllBut(componentType);
-                    panel.addOrReplace(componentType, new EntityModel(actualAdapter));
-                } else {
-                    final ComponentType componentType = ComponentType.ENTITY_LINK;
-                    panel.hideAllBut(componentType);
-                    panel.addOrReplace(componentType, new EntityModel(actualAdapter));
-                }
+                // force any changes in state etc to happen now prior to the redirect;
+                // this should cause our page mementos (eg EntityModel) to hold the correct state.  I hope.
+                panel.getTransactionManager().flushTransaction();
+                
+                // build page, also propagate any concurrency exception that might have occurred already
+                final EntityPage entityPage = new EntityPage(actualAdapter, exIfAny);
+                
+                // "redirect-after-post"
+                panel.setResponsePage(entityPage);
             }
 
-            private ObjectAdapter adapterFor(final Object pojo, final PersistenceSessionProvider psa) {
-                return psa.getPersistenceSession().getAdapterManager().adapterFor(pojo);
-            }
         },
         COLLECTION {
             @Override
             public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
                 
-                // cargo cult ... copied from OBJECT type
-                panel.getTransactionManager().flushTransaction();
-
                 final EntityCollectionModel collectionModel = EntityCollectionModel.createStandalone(resultAdapter);
                 collectionModel.setActionHint(panel.getActionModel());
                 
@@ -391,31 +342,56 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
                 // "redirect-after-post"
                 panel.setResponsePage(standaloneCollectionPage);
             }
-
         },
-        EMPTY {
+        VALUE {
             @Override
             public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
-                panel.permanentlyHide(ID_ACTION_NAME);
-                panel.hideAllBut(ComponentType.EMPTY_COLLECTION);
-                final ActionModel actionModel = panel.getActionModel();
-                panel.getComponentFactoryRegistry().addOrReplaceComponent(panel, ComponentType.EMPTY_COLLECTION, actionModel);
+                ValueModel valueModel = new ValueModel(resultAdapter);
+                valueModel.setActionHint(panel.getActionModel());
+                final ValuePage valuePage = new ValuePage(valueModel);
+                panel.setResponsePage(valuePage);
             }
         },
-        VALUE {
+        VALUE_CLOB {
             @Override
             public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
-                panel.permanentlyHide(ID_ACTION_NAME);
-                panel.hideAllBut(ComponentType.VALUE);
-                panel.getComponentFactoryRegistry().addOrReplaceComponent(panel, ComponentType.VALUE, new ValueModel(resultAdapter));
+                final Object value = resultAdapter.getObject();
+                final Clob clob = (Clob) value;
+                ResourceStreamRequestHandler handler = 
+                    new ResourceStreamRequestHandler(new StringResourceStream(clob.getChars(), clob.getMimeType().toString()), clob.getName());
+                handler.setContentDisposition(ContentDisposition.ATTACHMENT);
+                panel.getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+            }
+        },
+        VALUE_BLOB {
+            @Override
+            public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
+                final Object value = resultAdapter.getObject();
+                final Blob blob = (Blob) value;
+                ResourceRequestHandler handler = 
+                        new ResourceRequestHandler(new ByteArrayResource(blob.getMimeType().toString(), blob.getBytes(), blob.getName()), null);
+                panel.getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
+            }
+        },
+        VALUE_URL {
+            @Override
+            public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
+                final Object value = resultAdapter.getObject();
+                java.net.URL url = (java.net.URL) value;
+                IRequestHandler handler = new RedirectRequestHandler(url.toString());
+                panel.getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
             }
         },
         VOID {
             @Override
             public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
-                panel.permanentlyHide(ID_ACTION_NAME);
-                panel.hideAllBut(ComponentType.VOID_RETURN);
-                panel.getComponentFactoryRegistry().addOrReplaceComponent(panel, ComponentType.VOID_RETURN, null);
+                
+                final VoidModel voidModel = new VoidModel();
+                voidModel.setActionHint(panel.getActionModel());
+                
+                final VoidReturnPage voidReturnPage = new VoidReturnPage(voidModel);
+                
+                panel.setResponsePage(voidReturnPage);
             }
         };
 
@@ -435,6 +411,18 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
             final ObjectSpecification resultSpec = resultAdapter.getSpecification();
             if (resultSpec.isNotCollection()) {
                 if (resultSpec.getFacet(ValueFacet.class) != null) {
+                    
+                    final Object value = resultAdapter.getObject();
+                    if(value instanceof Clob) {
+                        return ResultType.VALUE_CLOB;
+                    } 
+                    if(value instanceof Blob) {
+                        return ResultType.VALUE_BLOB;
+                    } 
+                    if(value instanceof java.net.URL) {
+                        return ResultType.VALUE_URL;
+                    } 
+                    // else
                     return ResultType.VALUE;
                 } else {
                     return ResultType.OBJECT;
@@ -442,8 +430,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
             } else {
                 final List<Object> pojoList = asList(resultAdapter);
                 switch (pojoList.size()) {
-                case 0:
-                    return ResultType.EMPTY;
                 case 1:
                     return ResultType.OBJECT;
                 default:
@@ -451,20 +437,32 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
                 }
             }
         }
-
-        @SuppressWarnings("unchecked")
-        private static List<Object> asList(final ObjectAdapter resultAdapter) {
-            return (List<Object>) resultAdapter.getObject();
-        }
+    }
+    
+    private static ApplicationException getApplicationExceptionIfAny(Exception ex) {
+        Iterable<ApplicationException> appEx = Iterables.filter(Throwables.getCausalChain(ex), ApplicationException.class);
+        Iterator<ApplicationException> iterator = appEx.iterator();
+        return iterator.hasNext() ? iterator.next() : null;
     }
 
-    private void hideAllBut(final ComponentType... visibleComponentTypes) {
-        final List<ComponentType> visibleComponentTypeList = Arrays.asList(visibleComponentTypes);
-        for (final ComponentType componentType : COMPONENT_TYPES) {
-            if (!visibleComponentTypeList.contains(componentType)) {
-                permanentlyHide(componentType);
-            }
+    private static ObjectAdapter determineActualAdapter(final ObjectAdapter resultAdapter, final PersistenceSessionProvider psa) {
+        ObjectAdapter actualAdapter;
+        if (resultAdapter.getSpecification().isNotCollection()) {
+            actualAdapter = resultAdapter;
+        } else {
+            // will only be a single element
+            final List<Object> pojoList = asList(resultAdapter);
+            final Object pojo = pojoList.get(0);
+            actualAdapter = adapterFor(pojo, psa);
         }
+        return actualAdapter;
+    }
+    private static ObjectAdapter adapterFor(final Object pojo, final PersistenceSessionProvider psa) {
+        return psa.getPersistenceSession().getAdapterManager().adapterFor(pojo);
+    }
+    @SuppressWarnings("unchecked")
+    private static List<Object> asList(final ObjectAdapter resultAdapter) {
+        return (List<Object>) resultAdapter.getObject();
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
index ab6db1d..e697d07 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionPanelFactory.java
@@ -36,7 +36,7 @@ public class ActionPanelFactory extends ComponentFactoryAbstract {
     private static final long serialVersionUID = 1L;
 
     public ActionPanelFactory() {
-        super(ComponentType.ACTION, ActionPanel.class);
+        super(ComponentType.ACTION_PROMPT, ActionPanel.class);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
index 477ef3d..d73dedb 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/appactions/cssmenu/AppActionsCssMenuLinkFactory.java
@@ -42,7 +42,7 @@ class AppActionsCssMenuLinkFactory implements CssMenuLinkFactory {
 
     @Override
     public LinkAndLabel newLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId) {
-        final PageParameters pageParameters = ActionModel.createPageParameters(adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK), action, ActionModel.SingleResultsMode.REDIRECT, ConcurrencyChecking.NO_CHECK);
+        final PageParameters pageParameters = ActionModel.createPageParameters(adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK), action, ConcurrencyChecking.NO_CHECK);
 
         final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION_PROMPT);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
index 654643c..c2b67ab 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityActionLinkFactory.java
@@ -21,10 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.entity;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Page;
-import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.annotation.ActionSemantics;
@@ -33,16 +30,12 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActions;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionModel.SingleResultsMode;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
@@ -51,7 +44,7 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuItem;
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuLinkFactory;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
-import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
+import org.apache.isis.viewer.wicket.ui.pages.actionprompt.ActionPromptPage;
 import org.apache.isis.viewer.wicket.ui.util.Links;
 
 public final class EntityActionLinkFactory implements CssMenuLinkFactory {
@@ -69,8 +62,7 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
     public LinkAndLabel newLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId) {
         final ObjectAdapter adapter = adapterMemento.getObjectAdapter(ConcurrencyChecking.NO_CHECK);
 
-        final AbstractLink link = createLink(adapterMemento, action, linkId, adapter);
-        //action
+        final AbstractLink link = createLinkToPersistent(adapterMemento, action, linkId, adapter);
         final String label = ObjectAction.Utils.nameFor(action);
 
         // check visibility and whether enabled
@@ -97,13 +89,12 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
         return new LinkAndLabel(link, label, disabledReasonIfAny, blobOrClob, prototype, actionIdentifier, cssClass);
     }
 
-    private AbstractLink createLink(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, final ObjectAdapter adapter) {
+    private AbstractLink createLinkToPersistent(final ObjectAdapterMemento adapterMemento, final ObjectAction action, final String linkId, final ObjectAdapter adapter) {
         final Boolean persistent = adapter.representsPersistent();
-        if (persistent) {
-            return createLinkForPersistent(linkId, adapterMemento, action);
-        } else {
-            return createLinkForTransient(linkId, adapterMemento, action);
-        }
+        if (!persistent) {
+            throw new IllegalArgumentException("Object '" + adapter.titleString(null) + "' is not persistent.");
+        } 
+        return createLinkForPersistent(linkId, adapterMemento, action);
     }
 
     /**
@@ -121,27 +112,11 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
         // use the action semantics to determine whether invoking this action will require a concurrency check or not
         // if it's "safe", then we'll just continue without any checking. 
         final ConcurrencyChecking concurrencyChecking = ConcurrencyChecking.concurrencyCheckingFor(action.getSemantics());
-        final PageParameters pageParameters = ActionModel.createPageParameters(adapter, action, ActionModel.SingleResultsMode.REDIRECT, concurrencyChecking);
+        final PageParameters pageParameters = ActionModel.createPageParameters(adapter, action, concurrencyChecking);
         final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION_PROMPT);
         return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
     }
 
-    private Link<?> createLinkForTransient(final String linkId, final ObjectAdapterMemento adapterMemento, final ObjectAction action) {
-        final ActionMemento actionMemento = new ActionMemento(action);
-        final ActionModel.Mode actionMode = ActionModel.determineMode(action);
-        return new Link<String>(linkId) {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public void onClick() {
-                // TODO: seems like can't use REDIRECT, since won't
-                // let multiple setResponsePage() calls once
-                // committed to redirecting (I'm guessing)
-                final ActionModel actionModel = ActionModel.create(adapterMemento, actionMemento, actionMode, SingleResultsMode.INLINE);
-                setResponsePage(new ActionPromptPage(actionModel));
-            }
-        };
-    }
 
     // ///////////////////////////////////////////////////////////////////
     // Dependencies (from IsisContext)

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 197dccb..e81796d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -53,7 +53,7 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuBuilde
 import org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu.CssMenuPanel;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
-import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
+import org.apache.isis.viewer.wicket.ui.pages.actionprompt.ActionPromptPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index b8281a7..80e12f1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -20,16 +20,7 @@
 package org.apache.isis.viewer.wicket.ui.components.value;
 
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.request.IRequestHandler;
-import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
-import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
-import org.apache.wicket.request.http.handler.RedirectRequestHandler;
-import org.apache.wicket.request.resource.ByteArrayResource;
-import org.apache.wicket.request.resource.ContentDisposition;
-import org.apache.wicket.util.resource.StringResourceStream;
 
-import org.apache.isis.applib.value.Blob;
-import org.apache.isis.applib.value.Clob;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
@@ -47,31 +38,8 @@ public class StandaloneValuePanel extends PanelAbstract<ValueModel> {
     public StandaloneValuePanel(final String id, final ValueModel valueModel) {
         super(id, valueModel);
         final ObjectAdapter objectAdapter = getModel().getObject();
-        final Object value = objectAdapter.getObject();
-        final String label;
-        
-        if(value instanceof Clob) {
-            final Clob clob = (Clob) value;
-            ResourceStreamRequestHandler handler = 
-                new ResourceStreamRequestHandler(new StringResourceStream(clob.getChars(), clob.getMimeType().toString()), clob.getName());
-            handler.setContentDisposition(ContentDisposition.ATTACHMENT);
-            getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-            label = "Downloading: " + clob.getName();
-        } else if(value instanceof Blob) {
-            final Blob blob = (Blob) value;
-            ResourceRequestHandler handler = 
-                    new ResourceRequestHandler(new ByteArrayResource(blob.getMimeType().toString(), blob.getBytes(), blob.getName()), null);
-            getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-            label = "Downloading: " + blob.getName();
-        } else if(value instanceof java.net.URL) {
-            java.net.URL url = (java.net.URL) value;
-            label = "Downloading: " + objectAdapter.titleString(null);
-            IRequestHandler handler = 
-                    new RedirectRequestHandler(url.toString());
-            getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);
-        } else {
-            label = objectAdapter.titleString(null);
-        }
+
+        final String label = objectAdapter.titleString(null);
         add(new Label(ID_STANDALONE_VALUE, label));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
index eae472c..6a2d47a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.css
@@ -612,20 +612,20 @@ div.scalarPanel {
 
 /********************* Select2 component styling *****************************/
 
-.actionPage .select2-container,
-.entityPage .select2-container {
+.actionPromptPage .select2-container,
+.entityPage       .select2-container {
 	width: 200px;
 }
 
-.actionPage .select2-container .select2-choice,
-.entityPage .select2-container .select2-choice {
+.actionPromptPage .select2-container .select2-choice,
+.entityPage       .select2-container .select2-choice {
     padding: 4px;
 }
 
 
 
-.actionPage .select2-container .select2-choice,
-.entityPage .select2-container .select2-choice {
+.actionPromptPage .select2-container .select2-choice,
+.entityPage       .select2-container .select2-choice {
     -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
     border-radius: 4px;
@@ -637,49 +637,49 @@ div.scalarPanel {
 	border-top:1px solid #CCCBC7;
 }
 
-.actionPage .select2-container .select2-choice span,
-.entityPage .select2-container .select2-choice span {
+.actionPromptPage .select2-container .select2-choice span,
+.entityPage       .select2-container .select2-choice span {
     font-size:13px;
 }
 
-.actionPage .select2-container.select2-drop-above .select2-choice,
-.entityPage .select2-container.select2-drop-above .select2-choice {
+.actionPromptPage .select2-container.select2-drop-above .select2-choice,
+.entityPage       .select2-container.select2-drop-above .select2-choice {
     -webkit-border-radius:0px;
     -moz-border-radius:0px;
     border-radius:0px;
 }
 
-.actionPage .select2-drop,
-.entityPage .select2-drop {
+.actionPromptPage .select2-drop,
+.entityPage       .select2-drop {
     -webkit-border-radius:0px;
     -moz-border-radius:0px;
     border-radius:0px;
 }
 
-.actionPage .select2-drop.select2-drop-above,
-.entityPage .select2-drop.select2-drop-above {
+.actionPromptPage .select2-drop.select2-drop-above,
+.entityPage       .select2-drop.select2-drop-above {
     -webkit-border-radius:0px;
     -moz-border-radius:0px;
     border-radius:0px;
 }
 
-.actionPage .select2-container .select2-choice div,
-.entityPage .select2-container .select2-choice div {
+.actionPromptPage .select2-container .select2-choice div,
+.entityPage       .select2-container .select2-choice div {
     -webkit-border-radius:0px;
     -moz-border-radius:0px;
     border-radius:0px;
     background: #EBEBE4;
 }
 
-.actionPage .select2-container.select2-container-disabled .select2-choice,
-.entityPage .select2-container.select2-container-disabled .select2-choice {
+.actionPromptPage .select2-container.select2-container-disabled .select2-choice,
+.entityPage       .select2-container.select2-container-disabled .select2-choice {
 	background-color:#F0EFEA;
 	border:1px solid #F0EFEA;
 	border-top:1px solid #CCCBC7;
 }
 
-.actionPage .select2-container a,
-.entityPage .select2-container a {
+.actionPromptPage .select2-container a,
+.entityPage       .select2-container a {
 	font-weight: normal;
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.css
deleted file mode 100644
index eaeea17..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.css
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.html
deleted file mode 100644
index 7ee1742..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html>
-<!--
-  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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml"  
-      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
-      xml:lang="en"  
-      lang="en">
-	<wicket:head>
-		<wicket:link>
-			<link href="ActionPage.css" rel="stylesheet" type="text/css"/>
-		</wicket:link>
-	</wicket:head>
-	<body>
-		<wicket:extend>
-			<div class="actionPage">
-				<div wicket:id="bookmarks"/>
-				<div wicket:id="action"/>
-			</div>
-		</wicket:extend>
-	</body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.java
deleted file mode 100644
index 8e9f480..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.viewer.wicket.ui.pages.action;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
-import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
-
-/**
- * Web page representing an action invocation.
- */
-@AuthorizeInstantiation("org.apache.isis.viewer.wicket.roles.USER")
-public class ActionPromptPage extends PageAbstract {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
-     */
-    public ActionPromptPage(final ActionModel model) {
-        super(new PageParameters(), ApplicationActions.INCLUDE, model.getActionMemento().getAction().getName(), ComponentType.ACTION);
-        addChildComponents(model);
-
-        if(model.isBookmarkable()) {
-            bookmarkPage(model);
-        }
-        addBookmarkedPages();
-    }
-
-    public ActionPromptPage(final PageParameters pageParameters) {
-        this(pageParameters, buildModel(pageParameters));
-    }
-    
-    public ActionPromptPage(final PageParameters pageParameters, final ActionModel model) {
-        super(pageParameters, ApplicationActions.INCLUDE, model.getActionMemento().getAction().getName(), ComponentType.ACTION);
-        addChildComponents(model);
-        
-        // no need to bookmark because the ActionPanel will have done so for us
-        addBookmarkedPages();
-    }
-
-
-    
-    private static ActionModel buildModel(final PageParameters pageParameters) {
-        return ActionModel.createForPersistent(pageParameters);
-    }
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.css
new file mode 100644
index 0000000..eaeea17
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.css
@@ -0,0 +1,18 @@
+/*
+ *  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.
+ */

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
new file mode 100644
index 0000000..0c377c8
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+	<wicket:head>
+		<wicket:link>
+			<link href="ActionPage.css" rel="stylesheet" type="text/css"/>
+		</wicket:link>
+	</wicket:head>
+	<body>
+		<wicket:extend>
+			<div class="actionPromptPage">
+				<div wicket:id="bookmarks"/>
+				<div wicket:id="actionPrompt"/>
+			</div>
+		</wicket:extend>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
new file mode 100644
index 0000000..38dafd0
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
@@ -0,0 +1,66 @@
+/*
+ *  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.isis.viewer.wicket.ui.pages.actionprompt;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
+
+/**
+ * Web page representing an action invocation.
+ */
+@AuthorizeInstantiation("org.apache.isis.viewer.wicket.roles.USER")
+public class ActionPromptPage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
+     */
+    public ActionPromptPage(final ActionModel model) {
+        super(new PageParameters(), ApplicationActions.INCLUDE, model.getActionMemento().getAction().getName(), ComponentType.ACTION_PROMPT);
+        addChildComponents(model);
+
+        if(model.isBookmarkable()) {
+            bookmarkPage(model);
+        }
+        addBookmarkedPages();
+    }
+
+    public ActionPromptPage(final PageParameters pageParameters) {
+        this(pageParameters, buildModel(pageParameters));
+    }
+    
+    public ActionPromptPage(final PageParameters pageParameters, final ActionModel model) {
+        super(pageParameters, ApplicationActions.INCLUDE, model.getActionMemento().getAction().getName(), ComponentType.ACTION_PROMPT);
+        addChildComponents(model);
+        
+        // no need to bookmark because the ActionPanel will have done so for us
+        addBookmarkedPages();
+    }
+    
+    private static ActionModel buildModel(final PageParameters pageParameters) {
+        return ActionModel.createForPersistent(pageParameters);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.html
index 2c57c08..48d22b6 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.html
@@ -32,7 +32,7 @@
 			<div class="homePage">
                 <div wicket:id="bookmarks"/>
 				<div wicket:id="welcome"/>
-                <div wicket:id="action"/>
+                <div wicket:id="actionPrompt"/>
 			</div>
 		</wicket:extend>
 	</body>

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
index 01c6a92..6db4ee9 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
@@ -30,12 +30,7 @@ import org.apache.isis.core.metamodel.facets.actions.homepage.HomePageFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.ActionModel.Mode;
-import org.apache.isis.viewer.wicket.model.models.ActionModel.SingleResultsMode;
-import org.apache.isis.viewer.wicket.model.util.MementoFunctions;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
@@ -61,13 +56,10 @@ public class HomePage extends PageAbstract {
         final HomePageTuple homePageTuple = lookupHomePageAction();
         if(homePageTuple != null) {
             Components.permanentlyHide(this, ComponentType.WELCOME); 
-            final ObjectAdapterMemento serviceMemento = ObjectAdapterMemento.Functions.fromAdapter().apply(homePageTuple.serviceAdapter);
-            ActionMemento homePageActionMemento = ObjectAdapterMemento.Functions.fromAction().apply(homePageTuple.action);
-            Mode mode = homePageTuple.action.getParameterCount() > 0? Mode.PARAMETERS : Mode.RESULTS;
-            final IModel<?> actionModel = ActionModel.create(serviceMemento, homePageActionMemento, mode, SingleResultsMode.INLINE);
-            getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ACTION, actionModel);
+            final IModel<?> actionModel = ActionModel.create(homePageTuple.serviceAdapter, homePageTuple.action);
+            getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ACTION_PROMPT, actionModel);
         } else {
-            Components.permanentlyHide(this, ComponentType.ACTION);
+            Components.permanentlyHide(this, ComponentType.ACTION_PROMPT);
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.WELCOME, null);
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
index cd96a41..72c853a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
@@ -40,36 +40,17 @@ public class StandaloneCollectionPage extends PageAbstract {
      * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
      */
     public StandaloneCollectionPage(final EntityCollectionModel model) {
-        super(new PageParameters(), ApplicationActions.INCLUDE, getActionName(model), ComponentType.STANDALONE_COLLECTION);
+        super(new PageParameters(), ApplicationActions.INCLUDE, actionNameFrom(model), ComponentType.STANDALONE_COLLECTION);
         addChildComponents(model);
 
         addBookmarkedPages();
     }
 
-    private static String getActionName(final EntityCollectionModel model) {
+    private static String actionNameFrom(final EntityCollectionModel model) {
         ActionModel actionModel = model.getActionModelHint();
         if(actionModel != null) {
             return actionModel.getActionMemento().getAction().getName();
         }
         return "Results"; // fallback, probably not required because hint should always exist on the model. 
     }
-
-    // half-completed (copied from ActionPromptPage), but I don't think this is necessary because we are always going
-    // to do a redirect to this page.  If you come across this commented-out code and the app is running fine, you can probably delete it.
-    
-//    public StandaloneCollectionPage(final PageParameters pageParameters) {
-//        this(pageParameters, buildModel(pageParameters));
-//    }
-//    
-//    public StandaloneCollectionPage(final PageParameters pageParameters, final EntityCollectionModel model) {
-//        super(pageParameters, ApplicationActions.INCLUDE, getActionName(model).getName(), ComponentType.STANDALONE_COLLECTION);
-//        addChildComponents(model);
-//        
-//        // no need to bookmark because the ActionPanel will have done so for us
-//        addBookmarkedPages();
-//    }
-//    
-//    private static EntityCollectionModel buildModel(final PageParameters pageParameters) {
-//        return EntityCollectionModel.createForPersistent(pageParameters);
-//    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
new file mode 100644
index 0000000..bc29a7f
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.css
@@ -0,0 +1,25 @@
+/*
+ *  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.
+ */
+.valuePage .actionName {
+    font-size: large;
+    line-height:150%;
+    clear:both;
+    margin-bottom: 20px;
+}
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
new file mode 100644
index 0000000..48889c7
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<!--
+  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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml"  
+      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
+      xml:lang="en"  
+      lang="en">
+	<wicket:head>
+		<wicket:link>
+			<link href="ValuePage.css" rel="stylesheet" type="text/css"/>
+		</wicket:link>
+	</wicket:head>
+	<body>
+		<wicket:extend>
+			<div class="valuePage">
+				<div wicket:id="bookmarks"/>
+				<div class="myBlockContainer">
+                    <div class="iconAndTitle panel actionPanelHeaderNew">
+                         <p wicket:id="actionName" class="actionName">[action name]</p>
+                    </div>
+				    <div wicket:id="value"/>
+                </div>
+			</div>
+		</wicket:extend>
+	</body>
+</html>