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:11 UTC

[1/3] git commit: ISIS-618: standalone collections now rendered in own page...

Updated Branches:
  refs/heads/master 325638a65 -> 7353305d8


ISIS-618: standalone collections now rendered in own page...

... rather than inlined as part of the action page.

Also:
- renamed ActionPage to ActionPromptPage (because that is what it's responsibilities will ultimately be)


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

Branch: refs/heads/master
Commit: 981662d9a927e04ad22edd85db3f4271f6228b51
Parents: 325638a
Author: Dan Haywood <da...@apache.org>
Authored: Fri Nov 29 10:31:52 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Nov 29 13:39:45 2013 +0000

----------------------------------------------------------------------
 .../wicket/viewer/IsisWicketApplication.java    |  2 +-
 .../ComponentFactoryRegistrarDefault.java       |  2 +
 .../registries/pages/PageClassListDefault.java  | 17 +++--
 ...ClassListDefault_RegistrationAndCaching.java | 10 +--
 .../wicket/model/models/BookmarkTreeNode.java   |  2 +-
 .../model/models/EntityCollectionModel.java     | 11 ++-
 .../viewer/wicket/model/models/PageType.java    |  3 +-
 .../isis/viewer/wicket/ui/ComponentType.java    |  5 ++
 .../components/actionlink/ActionLinkPanel.java  |  2 +-
 .../ui/components/actions/ActionPanel.html      |  2 -
 .../ui/components/actions/ActionPanel.java      | 29 +++-----
 .../cssmenu/AppActionsCssMenuLinkFactory.java   |  2 +-
 .../entity/EntityActionLinkFactory.java         | 10 +--
 .../entity/header/EntityHeaderPanel.java        |  6 +-
 .../StandaloneCollectionPanel.css               | 42 +++++++++++
 .../StandaloneCollectionPanel.html              | 37 ++++++++++
 .../StandaloneCollectionPanel.java              | 54 ++++++++++++++
 .../StandaloneCollectionPanelFactory.java       | 53 ++++++++++++++
 .../wicket/ui/pages/action/ActionPage.css       | 18 -----
 .../wicket/ui/pages/action/ActionPage.html      | 38 ----------
 .../wicket/ui/pages/action/ActionPage.java      | 68 ------------------
 .../wicket/ui/pages/action/ActionPromptPage.css | 18 +++++
 .../ui/pages/action/ActionPromptPage.html       | 38 ++++++++++
 .../ui/pages/action/ActionPromptPage.java       | 68 ++++++++++++++++++
 .../StandaloneCollectionPage.css                | 18 +++++
 .../StandaloneCollectionPage.html               | 38 ++++++++++
 .../StandaloneCollectionPage.java               | 75 ++++++++++++++++++++
 .../java/webapp/PageClassListForToDoApp.java    |  4 +-
 28 files changed, 502 insertions(+), 170 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 8ff59d6..e4f9313 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
@@ -256,7 +256,7 @@ public class IsisWicketApplication extends AuthenticatedWebApplication implement
 
             // prettier URLs
             mountPage("/entity/${objectOid}/", PageType.ENTITY);
-            mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/${actionSingleResultsMode}/#{actionArgs}", PageType.ACTION);
+            mountPage("/action/${objectOid}/${actionOwningSpec}/${actionId}/${actionType}/${actionSingleResultsMode}/#{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/981662d9/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index 91c3155..bd41e66 100644
--- a/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/component/viewer/wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -73,6 +73,7 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.ShortPanelF
 import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.string.StringPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.scalars.value.ValuePanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.standalonecollection.StandaloneCollectionPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.unknown.UnknownModelPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.value.StandaloneValuePanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.voidreturn.VoidReturnPanelFactory;
@@ -247,6 +248,7 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
 
     protected void addComponentFactoriesForAction(final ComponentFactoryList componentFactories) {
         componentFactories.add(new ActionPanelFactory());
+        componentFactories.add(new StandaloneCollectionPanelFactory());
     }
 
     protected void addComponentFactoriesForActionLink(final ComponentFactoryList componentFactories) {

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 b057b3f..cde4e8c 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,10 +27,11 @@ 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.ActionPage;
+import org.apache.isis.viewer.wicket.ui.pages.action.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;
 
 /**
  * Default implementation of {@link PageClassList}, specifying the default pages
@@ -45,14 +46,15 @@ public class PageClassListDefault implements PageClassList {
         pageRegistry.registerPage(PageType.ABOUT, getAboutPageClass());
         pageRegistry.registerPage(PageType.ENTITY, getEntityPageClass());
         pageRegistry.registerPage(PageType.HOME, getHomePageClass());
-        pageRegistry.registerPage(PageType.ACTION, getActionPageClass());
+        pageRegistry.registerPage(PageType.ACTION_PROMPT, getActionPromptPageClass());
+        pageRegistry.registerPage(PageType.STANDALONE_COLLECTION, getStandaloneCollectionPageClass());
     }
 
     /**
      * For subclassing if required.
      */
-    protected Class<? extends Page> getActionPageClass() {
-        return ActionPage.class;
+    protected Class<? extends Page> getActionPromptPageClass() {
+        return ActionPromptPage.class;
     }
 
     /**
@@ -65,6 +67,13 @@ public class PageClassListDefault implements PageClassList {
     /**
      * For subclassing if required.
      */
+    protected Class<? extends Page> getStandaloneCollectionPageClass() {
+        return StandaloneCollectionPage.class;
+    }
+
+    /**
+     * For subclassing if required.
+     */
     protected Class<? extends Page> getSignInPageClass() {
         return WicketSignInPage.class;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 adc3e26..217c249 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.ActionPage;
+import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
 import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault;
 
@@ -48,20 +48,20 @@ public class PageClassListDefault_RegistrationAndCaching {
 
     @Test
     public void cachesPageByPageType() {
-        final Class<? extends Page> pageClass = registryImpl.getPageClass(PageType.ACTION);
+        final Class<? extends Page> pageClass = registryImpl.getPageClass(PageType.ACTION_PROMPT);
         assertThat(pageClass, is(not(nullValue())));
     }
 
     @Test
     public void canRegisterNewPageType() {
-        class TestingActionPage extends ActionPage {
+        class TestingActionPage extends ActionPromptPage {
             TestingActionPage() {
                 super((ActionModel) null);
             }
         }
-        registryImpl.registerPage(PageType.ACTION, TestingActionPage.class);
+        registryImpl.registerPage(PageType.ACTION_PROMPT, TestingActionPage.class);
 
-        final Class<? extends Page> pageClass = registryImpl.getPageClass(PageType.ACTION);
+        final Class<? extends Page> pageClass = registryImpl.getPageClass(PageType.ACTION_PROMPT);
         assertThat(pageClass.equals(TestingActionPage.class), is(true));
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index d8c0e9e..e3b88fd 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -62,7 +62,7 @@ public class BookmarkTreeNode implements Serializable {
             this.title = bookmarkableModel.getTitle();
         }
         public PageType getPageType() {
-            return bookmarkableModel instanceof EntityModel ? PageType.ENTITY : PageType.ACTION;
+            return bookmarkableModel instanceof EntityModel ? PageType.ENTITY : PageType.ACTION_PROMPT;
         }
 
         public String getTitle() {

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index fa5e748..076cc44 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -157,8 +157,15 @@ public class EntityCollectionModel extends ModelAbstract<List<ObjectAdapter>> im
         final List<ObjectAdapterMemento> mementoList = asMementoList(collectionAsAdapter);
 
         final ObjectSpecification elementSpec = collectionAsAdapter.getElementSpecification();
-        final Class<?> elementType = elementSpec.getCorrespondingClass();
-        int pageSize = pageSize(elementSpec.getFacet(PagedFacet.class), PAGE_SIZE_DEFAULT_FOR_STANDALONE);
+        
+        final Class<?> elementType;
+        int pageSize = PAGE_SIZE_DEFAULT_FOR_STANDALONE;
+        if (elementSpec != null) {
+            elementType = elementSpec.getCorrespondingClass();
+            pageSize = pageSize(elementSpec.getFacet(PagedFacet.class), PAGE_SIZE_DEFAULT_FOR_STANDALONE);
+        } else {
+            elementType = Object.class;
+        }
         
         return new EntityCollectionModel(elementType, mementoList, pageSize);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 7cfb9d5..96687ae 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
@@ -34,5 +34,6 @@ public enum PageType {
     HOME, 
     ABOUT, 
     ENTITY, 
-    ACTION;
+    ACTION_PROMPT,
+    STANDALONE_COLLECTION;
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 d06d2b8..2547adf 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
@@ -114,6 +114,11 @@ public enum ComponentType {
      */
     ACTION,
     /**
+     * Top-level component for rendering a standalone collection (ie as returned by
+     * an action).
+     */
+    STANDALONE_COLLECTION,
+    /**
      * Bookmarked link to invoke an action
      */
     ACTION_LINK,

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionlink/ActionLinkPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionlink/ActionLinkPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionlink/ActionLinkPanel.java
index da2140f..0b81418 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionlink/ActionLinkPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionlink/ActionLinkPanel.java
@@ -69,7 +69,7 @@ public class ActionLinkPanel extends PanelAbstract<ActionModel> {
     private WebMarkupContainer addOrReplaceLinkWrapper(final ActionModel actionModel) {
 
         final PageParameters pageParameters = actionModel.getPageParameters();
-        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION);
+        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION_PROMPT);
         final AbstractLink link = newLink(ID_ACTION_LINK, pageClass, pageParameters);
         
         label = new Label(ID_ACTION_TITLE, determineTitle());

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 d3b26cd..c3f7e65 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
@@ -36,8 +36,6 @@
 				</span>
 				<span wicket:id="entity">
 				</span>
-				<span wicket:id="collectionContents">
-				</span>
 				<span wicket:id="emptyCollection">
 				</span>
 				<span wicket:id="value">

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 1bf070e..545d269 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
@@ -55,6 +55,7 @@ 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.panels.PanelAbstract;
 
 /**
@@ -84,8 +85,7 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
             ComponentType.ENTITY, 
             ComponentType.VALUE, 
             ComponentType.EMPTY_COLLECTION, 
-            ComponentType.VOID_RETURN, 
-            ComponentType.COLLECTION_CONTENTS);
+            ComponentType.VOID_RETURN);
 
     private static final String ID_ACTION_NAME = "actionName";
 
@@ -355,12 +355,10 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
                     // this should cause our page mementos (eg EntityModel) to hold the correct state.  I hope.
                     panel.getTransactionManager().flushTransaction();
                     
-                    // build page, also propogate any concurrency exception that might have occurred already
+                    // build page, also propagate any concurrency exception that might have occurred already
                     final EntityPage entityPage = new EntityPage(actualAdapter, exIfAny);
                     
                     // "redirect-after-post"
-                    
-                    // panel.setRedirect(true); // no longer required, http://mail-archives.apache.org/mod_mbox/wicket-users/201103.mbox/%3CAANLkTin3NmEBaMY9CF8diXA+wTMamQPc2O+tWvG_HCiW@mail.gmail.com%3E
                     panel.setResponsePage(entityPage);
                     
                 } else if (singleResultsMode == ActionModel.SingleResultsMode.INLINE) {
@@ -381,20 +379,19 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         COLLECTION {
             @Override
             public void addResults(final ActionPanel panel, final ObjectAdapter resultAdapter) {
-                ObjectAction action = panel.getActionModel().getActionMemento().getAction();
-                panel.addOrReplace(new Label(ActionPanel.ID_ACTION_NAME, Model.of(action.getName())));
                 
-                panel.hideAllBut(ComponentType.COLLECTION_CONTENTS);
-                addOrReplaceCollectionResultsPanel(panel, resultAdapter);
-            }
+                // cargo cult ... copied from OBJECT type
+                panel.getTransactionManager().flushTransaction();
 
-            private void addOrReplaceCollectionResultsPanel(final ActionPanel panel, final ObjectAdapter resultAdapter) {
                 final EntityCollectionModel collectionModel = EntityCollectionModel.createStandalone(resultAdapter);
                 collectionModel.setActionHint(panel.getActionModel());
-                final ComponentFactoryRegistry componentFactoryRegistry = panel.getComponentFactoryRegistry();
-                componentFactoryRegistry.addOrReplaceComponent(panel, ComponentType.COLLECTION_CONTENTS, collectionModel);
-
+                
+                final StandaloneCollectionPage standaloneCollectionPage = new StandaloneCollectionPage(collectionModel);
+                
+                // "redirect-after-post"
+                panel.setResponsePage(standaloneCollectionPage);
             }
+
         },
         EMPTY {
             @Override
@@ -470,10 +467,6 @@ public class ActionPanel extends PanelAbstract<ActionModel> implements ActionExe
         }
     }
 
-    private void hideAll() {
-        hideAllBut();
-    }
-
 
     ///////////////////////////////////////////////////////
     // Dependencies (from context)

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 7ba4c8e..477ef3d 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
@@ -44,7 +44,7 @@ class AppActionsCssMenuLinkFactory implements CssMenuLinkFactory {
     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 Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION);
+        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION_PROMPT);
 
         final AbstractLink link = Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
         final String actionLabel = ObjectAction.Utils.nameFor(action);

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 0844c77..654643c 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
@@ -51,7 +51,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.ActionPage;
+import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
 import org.apache.isis.viewer.wicket.ui.util.Links;
 
 public final class EntityActionLinkFactory implements CssMenuLinkFactory {
@@ -107,8 +107,8 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
     }
 
     /**
-     * Creates a link to the {@link ActionPage} (ie the {@link PageClassRegistry registered page} for 
-     * {@link PageType#ACTION action}s) with the appropriate {@link PageParameters} to either render the action's
+     * Creates a link to the {@link ActionPromptPage} (ie the {@link PageClassRegistry registered page} for 
+     * {@link PageType#ACTION_PROMPT action}s) with the appropriate {@link PageParameters} to either render the action's
      * parameter form (if it takes arguments) or to invoke the action directly.
      * 
      * <p>
@@ -122,7 +122,7 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
         // 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 Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION);
+        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ACTION_PROMPT);
         return Links.newBookmarkablePageLink(linkId, pageParameters, pageClass);
     }
 
@@ -138,7 +138,7 @@ public final class EntityActionLinkFactory implements CssMenuLinkFactory {
                 // let multiple setResponsePage() calls once
                 // committed to redirecting (I'm guessing)
                 final ActionModel actionModel = ActionModel.create(adapterMemento, actionMemento, actionMode, SingleResultsMode.INLINE);
-                setResponsePage(new ActionPage(actionModel));
+                setResponsePage(new ActionPromptPage(actionModel));
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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 11fc06d..197dccb 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.ActionPage;
+import org.apache.isis.viewer.wicket.ui.pages.action.ActionPromptPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 /**
@@ -138,7 +138,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
         topLevelActions.addAll(userActions);
     }
     
-    private Filter<ObjectAction> memberOrderNameNotAssociation(final ObjectSpecification adapterSpec) {
+    private static Filter<ObjectAction> memberOrderNameNotAssociation(final ObjectSpecification adapterSpec) {
 
         final List<ObjectAssociation> associations = adapterSpec.getAssociations(Contributed.INCLUDED);
         final List<String> associationNames = Lists.transform(associations, Functions.compose(StringFunctions.toLowerCase(), ObjectAssociation.Functions.toName()));
@@ -165,7 +165,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> implements Act
 
     @Override
     public void onClick(final ActionModel actionModel) {
-        setResponsePage(new ActionPage(actionModel));
+        setResponsePage(new ActionPromptPage(actionModel));
     }
 
     

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.css
new file mode 100644
index 0000000..b88fe0c
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.css
@@ -0,0 +1,42 @@
+/*
+ *  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.
+ */
+
+
+.standaloneCollectionPanel {
+}
+
+div.standaloneCollectionPanel .iconAndTitle {
+	float: left;
+}
+
+.standaloneCollectionPanel .iconAndTitle .entityImage {
+	width: 32px;
+	height: 32px;
+}
+
+.standaloneCollectionPanel .iconAndTitle .entityTitle {
+	font-size: x-large;
+}
+
+.standaloneCollectionPanel .iconAndTitle .actionName {
+	font-size: large;
+	line-height:150%;
+	clear:both;
+}
+ 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html
new file mode 100644
index 0000000..513ec2e
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<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">
+	<head></head>
+	<body>
+		<wicket:panel>
+			<div class="standaloneCollectionPanel actionComponentType myBlockContainer">
+				<div class="iconAndTitle panel actionPanelHeaderNew">
+			         <p wicket:id="actionName" class="actionName">[action name]</p>
+                </div>
+				<span wicket:id="collectionContents">
+				</span>
+			</div>
+		</wicket:panel>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
new file mode 100644
index 0000000..5c3ece0
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
@@ -0,0 +1,54 @@
+/*
+ *  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.components.standalonecollection;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+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.panels.PanelAbstract;
+
+public class StandaloneCollectionPanel extends PanelAbstract<EntityCollectionModel> {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ACTION_NAME = "actionName";
+
+    public StandaloneCollectionPanel(final String id, final EntityCollectionModel entityCollectionModel) {
+        super(id, entityCollectionModel);
+        buildGui(entityCollectionModel);
+    }
+
+    private void buildGui(final EntityCollectionModel entityCollectionModel) {
+        
+        ActionModel actionModel = entityCollectionModel.getActionModelHint();
+        ObjectAction action = actionModel.getActionMemento().getAction();
+        addOrReplace(new Label(StandaloneCollectionPanel.ID_ACTION_NAME, Model.of(action.getName())));
+        
+        final ComponentFactoryRegistry componentFactoryRegistry = getComponentFactoryRegistry();
+        componentFactoryRegistry.addOrReplaceComponent(this, ComponentType.COLLECTION_CONTENTS, entityCollectionModel);
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanelFactory.java
new file mode 100644
index 0000000..b85c4e1
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanelFactory.java
@@ -0,0 +1,53 @@
+/*
+ *  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.components.standalonecollection;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.model.IModel;
+
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.ui.ComponentFactory;
+import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
+import org.apache.isis.viewer.wicket.ui.ComponentType;
+
+/**
+ * {@link ComponentFactory} for {@link StandaloneCollectionPanel}.
+ */
+public class StandaloneCollectionPanelFactory extends ComponentFactoryAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    public StandaloneCollectionPanelFactory() {
+        super(ComponentType.STANDALONE_COLLECTION, StandaloneCollectionPanel.class);
+    }
+
+    @Override
+    public ApplicationAdvice appliesTo(final IModel<?> model) {
+        return appliesIf(model instanceof EntityCollectionModel);
+    }
+
+    @Override
+    public Component createComponent(final String id, final IModel<?> model) {
+        final EntityCollectionModel actionModel = (EntityCollectionModel) model;
+        return new StandaloneCollectionPanel(id, actionModel);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.css
deleted file mode 100644
index eaeea17..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.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/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.html
deleted file mode 100644
index 7ee1742..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.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/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.java
deleted file mode 100644
index adb39f2..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPage.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 ActionPage extends PageAbstract {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
-     */
-    public ActionPage(final ActionModel model) {
-        super(new PageParameters(), ApplicationActions.INCLUDE, model.getActionMemento().getAction().getName(), ComponentType.ACTION);
-        addChildComponents(model);
-
-        if(model.isBookmarkable()) {
-            bookmarkPage(model);
-        }
-        addBookmarkedPages();
-    }
-
-    public ActionPage(final PageParameters pageParameters) {
-        this(pageParameters, buildModel(pageParameters));
-    }
-    
-    public ActionPage(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/981662d9/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
new file mode 100644
index 0000000..eaeea17
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/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/981662d9/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
new file mode 100644
index 0000000..7ee1742
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/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="actionPage">
+				<div wicket:id="bookmarks"/>
+				<div wicket:id="action"/>
+			</div>
+		</wicket:extend>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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
new file mode 100644
index 0000000..8e9f480
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/action/ActionPromptPage.java
@@ -0,0 +1,68 @@
+/*
+ *  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/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.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/standalonecollection/StandaloneCollectionPage.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/981662d9/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.html
new file mode 100644
index 0000000..f8d41fe
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.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="StandaloneCollectionPage.css" rel="stylesheet" type="text/css"/>
+		</wicket:link>
+	</wicket:head>
+	<body>
+		<wicket:extend>
+			<div class="standaloneCollectionPage">
+				<div wicket:id="bookmarks"/>
+				<div wicket:id="standaloneCollection"/>
+			</div>
+		</wicket:extend>
+	</body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/981662d9/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
new file mode 100644
index 0000000..cd96a41
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/standalonecollection/StandaloneCollectionPage.java
@@ -0,0 +1,75 @@
+/*
+ *  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.standalonecollection;
+
+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.model.models.EntityCollectionModel;
+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 StandaloneCollectionPage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 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);
+        addChildComponents(model);
+
+        addBookmarkedPages();
+    }
+
+    private static String getActionName(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/981662d9/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/webapp/PageClassListForToDoApp.java
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/webapp/PageClassListForToDoApp.java b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/webapp/PageClassListForToDoApp.java
index f4d7c04..3290878 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/webapp/PageClassListForToDoApp.java
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/java/webapp/PageClassListForToDoApp.java
@@ -54,8 +54,8 @@ public class PageClassListForToDoApp extends PageClassListDefault {
      * More typically, override using custom {@link ComponentFactory}s.
      */
     @Override
-    protected Class<? extends Page> getActionPageClass() {
+    protected Class<? extends Page> getActionPromptPageClass() {
         // no override
-        return super.getActionPageClass();
+        return super.getActionPromptPageClass();
     }
 }


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

Posted by da...@apache.org.
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.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java
new file mode 100644
index 0000000..576114c
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/value/ValuePage.java
@@ -0,0 +1,70 @@
+/*
+ *  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.value;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.ValueModel;
+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 ValuePage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ACTION_NAME = "actionName";
+    
+    /**
+     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
+     */
+    public ValuePage(final ValueModel valueModel) {
+        this(valueModel, actionNameFrom(valueModel));
+        
+    }
+
+    
+    private ValuePage(ValueModel valueModel, String actionName) {
+        super(new PageParameters(), ApplicationActions.INCLUDE, actionName, ComponentType.VALUE);
+        
+        addOrReplace(new Label(ID_ACTION_NAME, actionName));
+
+        addChildComponents(valueModel);
+
+        addBookmarkedPages();
+        
+    }
+
+    private static String actionNameFrom(final ValueModel valueModel) {
+        ActionModel actionModel = valueModel.getActionModelHint();
+        if(actionModel != null) {
+            return actionModel.getActionMemento().getAction().getName();
+        }
+        return "Results"; // fallback, probably not required because hint should always exist on the model. 
+    }
+
+}

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/voidreturn/VoidReturnPage.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.css
new file mode 100644
index 0000000..19d821f
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.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.
+ */
+.voidReturnPage .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/voidreturn/VoidReturnPage.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.html
new file mode 100644
index 0000000..03301fe
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.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="VoidReturnPage.css" rel="stylesheet" type="text/css"/>
+		</wicket:link>
+	</wicket:head>
+	<body>
+		<wicket:extend>
+			<div class="voidReturnPage">
+				<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="voidReturn"/>
+                </div>
+			</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/voidreturn/VoidReturnPage.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
new file mode 100644
index 0000000..2c3a92b
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/voidreturn/VoidReturnPage.java
@@ -0,0 +1,67 @@
+/*
+ *  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.voidreturn;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.viewer.wicket.model.models.ActionModel;
+import org.apache.isis.viewer.wicket.model.models.VoidModel;
+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 VoidReturnPage extends PageAbstract {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID_ACTION_NAME = "actionName";
+
+    /**
+     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
+     */
+    public VoidReturnPage(final VoidModel model) {
+        this(model, actionNameFrom(model));
+    }
+
+    private VoidReturnPage(final VoidModel model, final String actionName) {
+        super(new PageParameters(), ApplicationActions.INCLUDE, actionName, ComponentType.VOID_RETURN);
+
+        addOrReplace(new Label(ID_ACTION_NAME, actionName));
+        
+        addChildComponents(model);
+
+        addBookmarkedPages();
+    }
+    
+    private static String actionNameFrom(final VoidModel 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. 
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/7353305d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index b056e92..d29a202 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -187,12 +187,12 @@ public interface ObjectAction extends ObjectMember {
         private Utils() {
         }
 
-        public static String nameFor(final ObjectAction noAction) {
-            final String actionName = noAction.getName();
+        public static String nameFor(final ObjectAction objAction) {
+            final String actionName = objAction.getName();
             if (actionName != null) {
                 return actionName;
             }
-            final NamedFacet namedFacet = noAction.getFacet(NamedFacet.class);
+            final NamedFacet namedFacet = objAction.getFacet(NamedFacet.class);
             if (namedFacet != null) {
                 return namedFacet.value();
             }


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

Posted by da...@apache.org.
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>