Author: dashorst
Date: Mon Jun  8 15:53:01 2009
New Revision: 782688

URL: http://svn.apache.org/viewvc?rev=782688&view=rev
Log:
WICKET-2315

Added:
    
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
Modified:
    
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java
    
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java?rev=782688&r1=782687&r2=782688&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Page.java
 Mon Jun  8 15:53:01 2009
@@ -1617,4 +1617,15 @@
                        "Page does not support markup. This error can happen if 
you have extended Page directly, instead extend WebPage");
        }
 
+       /**
+        * Gets page instance's unique identifier
+        * 
+        * @return instance unique identifier
+        */
+       public PageReference getPageReference()
+       {
+               setStatelessHint(false);
+               return new PageReference(pageMapName, numericId, 
getCurrentVersionNumber());
+
+       }
 }

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=782688&r1=782687&r2=782688&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
 Mon Jun  8 15:53:01 2009
@@ -37,6 +37,7 @@
 import org.apache.wicket.request.target.component.ComponentRequestTarget;
 import 
org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
 import org.apache.wicket.request.target.component.IPageRequestTarget;
+import org.apache.wicket.request.target.component.PageReferenceRequestTarget;
 import org.apache.wicket.request.target.component.PageRequestTarget;
 import 
org.apache.wicket.request.target.component.listener.BehaviorRequestTarget;
 import 
org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget;
@@ -1025,6 +1026,20 @@
        }
 
        /**
+        * Returns a URL that references the page pointed to by <code>id</code>
+        * 
+        * @see PageIdRequestTarget for more details
+        * 
+        * @param id
+        *            page id
+        * @return url pointing to the page
+        */
+       public final CharSequence urlFor(final PageReference id)
+       {
+               return urlFor(new PageReferenceRequestTarget(id));
+       }
+
+       /**
         * Returns a URL that references a shared resource through the provided 
resource reference.
         * 
         * @param resourceReference

Added: 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java?rev=782688&view=auto
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
 (added)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/request/target/component/PageReferenceRequestTarget.java
 Mon Jun  8 15:53:01 2009
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.target.component;
+
+import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.Page;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.RequestCycle;
+
+/**
+ * Target that navigates to a page pointed to by its id. The great benefit of 
this target over the
+ * PageRequestTarget is that no reference to the actual page is needed, which 
greatly facilitates
+ * navigational usecases where a list or a stack of page references is needed 
(ie breadcrumbs).
+ * 
+ * @see PageReference
+ * 
+ * @author igor.vaynberg
+ */
+public class PageReferenceRequestTarget implements IRequestTarget
+{
+       private final PageReference reference;
+
+       /**
+        * Constructor
+        * 
+        * Even though a page is passed in, only a reference to its {...@link 
PageReference} is kept
+        * 
+        * @param page
+        */
+       public PageReferenceRequestTarget(Page page)
+       {
+               if (page == null)
+               {
+                       throw new IllegalArgumentException("Argument `page` 
cannot be null");
+               }
+               reference = page.getPageReference();
+       }
+
+       /**
+        * Constructor
+        * 
+        * @param pageReference
+        */
+       public PageReferenceRequestTarget(PageReference pageReference)
+       {
+               if (pageReference == null)
+               {
+                       throw new IllegalArgumentException("Argument `pageId` 
cannot be null");
+               }
+
+               reference = pageReference;
+       }
+
+
+       /**
+        * @return id page id
+        */
+       public final PageReference getPageReference()
+       {
+               return reference;
+       }
+
+       /** {...@inheritdoc} */
+       public void respond(RequestCycle requestCycle)
+       {
+               Page page = reference.getPage();
+
+               // Should page be redirected to?
+               if (requestCycle.isRedirect())
+               {
+                       // Redirect to the page
+                       requestCycle.redirectTo(page);
+               }
+               else
+               {
+                       // Let page render itself
+                       page.renderPage();
+               }
+       }
+
+       /** {...@inheritdoc} */
+       public void detach(RequestCycle requestCycle)
+       {
+               reference.getPage().detach();
+       }
+
+}


Reply via email to