Sorry, i hit the wrong button, please ignore my previous mail.
--------

Well I finally got it working, making some smaller changes to the
LinkFactory(Impl), ComponentResource and PageLink of course. 

PageLink now takes a context parameter just like actionLink does and passes
it to the LinkFactory. The LinkFactory uses this context. The Passivate
event is only send when not specifying a context.

Example:
<t:comp type="Loop" source="prop:entries" value="entry">
<t:comp type="PageLink" page="view"
context="prop:entry.id">${entry.title}</t:comp>
</t:comp>

Details:
I added a method "Link createPageLink(Page page, Object... overrideContext)"
and markes the "Link createPageLink(Page page)" one as deprecated (java
should accept calls to createPageLink(page) without the deprecated Method
but it makes some trouble using reflection. 

Test Cases:
All existing Test cases are working, but I have not added a new one to test
the new functionality because I was too confused by the existing page_link
test in LinkFactoryImplTest class.

Patch is attached, maybe someone has use for it, or maybe it can get into
tapestry as contribution, i dont know. 

regards
Dennis
Index: src/test/java/org/apache/tapestry/internal/services/NoOpPage.java
===================================================================
--- src/test/java/org/apache/tapestry/internal/services/NoOpPage.java	(revision 508395)
+++ src/test/java/org/apache/tapestry/internal/services/NoOpPage.java	(working copy)
@@ -117,7 +117,7 @@
 
     }
 
-    public Link createPageLink(String pageName)
+    public Link createPageLink(String pageName, Object... contextOverride)
     {
         return null;
     }
Index: src/main/java/org/apache/tapestry/corelib/components/PageLink.java
===================================================================
--- src/main/java/org/apache/tapestry/corelib/components/PageLink.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/corelib/components/PageLink.java	(working copy)
@@ -14,6 +14,8 @@
 
 package org.apache.tapestry.corelib.components;
 
+import java.util.List;
+
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.Link;
 import org.apache.tapestry.MarkupWriter;
@@ -32,6 +34,9 @@
     @Parameter(required = true, defaultPrefix = "literal")
     private String _page;
 
+    @Parameter
+    private List<?> _context;
+    
     @Inject
     private ComponentResources _resources;
 
@@ -43,7 +48,9 @@
     {
         String clientId = _support.allocateClientId(_resources.getId());
 
-        Link link = _resources.createPageLink(_page);
+        Object[] contextArray = _context == null ? new Object[0] : _context.toArray();
+        
+        Link link = _resources.createPageLink(_page, contextArray);
 
         writer.element("a", "href", link, "id", clientId);
 
Index: src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
===================================================================
--- src/main/java/org/apache/tapestry/ComponentResourcesCommon.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/ComponentResourcesCommon.java	(working copy)
@@ -59,8 +59,10 @@
     /**
      * Creates a link that will case a page within the application to render.
      */
+    Link createPageLink(String pageName, Object... overrideContext);
+    
+    @Deprecated
     Link createPageLink(String pageName);
-
     /**
      * Returns a string consisting of the fully qualified class name of the containing page, and the
      * [EMAIL PROTECTED] #getNestedId() nested id} of this component, separated by a colon. I.e.,
Index: src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java	(working copy)
@@ -137,33 +137,47 @@
 
     public Link createPageLink(final Page page)
     {
+        return createPageLink(page, new Object[0]);
+    }
+    
+    public Link createPageLink(final Page page, Object... overrideContext)
+    {
         Defense.notNull(page, "page");
 
         String pageName = page.getName();
         String logicalPageName = _componentClassResolver.resolvePageClassNameToPageName(pageName);
 
-        final List context = newList();
-
-        ComponentEventHandler handler = new ComponentEventHandler()
+        String[] contextStrings;
+        if(overrideContext.length > 0)
         {
-            @SuppressWarnings("unchecked")
-            public boolean handleResult(Object result, Component component, String methodDescription)
+            contextStrings = toContextStrings(overrideContext);
+        }
+        else
+        {
+            final List context = newList(); 
+            
+            ComponentEventHandler handler = new ComponentEventHandler()
             {
-                PassivateContextHandler contextHandler = _registry.getByInstance(result);
+                @SuppressWarnings("unchecked")
+                public boolean handleResult(Object result, Component component, String methodDescription)
+                {
+                    PassivateContextHandler contextHandler = _registry.getByInstance(result);
 
-                contextHandler.handle(result, context);
+                    contextHandler.handle(result, context);
 
-                return true;
-            }
-        };
+                    return true;
+                }
+            };
+            
+            ComponentPageElement rootElement = page.getRootElement();
 
-        ComponentPageElement rootElement = page.getRootElement();
+            rootElement.triggerEvent(TapestryConstants.PASSIVATE_EVENT, null, handler);
+            
+            contextStrings = toContextStrings(context.toArray());
+        }
 
-        rootElement.triggerEvent(TapestryConstants.PASSIVATE_EVENT, null, handler);
-
         PageLinkTarget target = new PageLinkTarget(logicalPageName);
-        ComponentInvocation invocation = new ComponentInvocation(target, toContextStrings(context
-                .toArray()));
+        ComponentInvocation invocation = new ComponentInvocation(target, contextStrings);
 
         Link link = new LinkImpl(_encoder, _contextPathSource.getContextPath(), invocation, false);
 
@@ -190,11 +204,16 @@
         return result;
     }
 
-    public Link createPageLink(String pageName)
+    public Link createPageLink(String page)
     {
+        return createPageLink(page, new Object[0]);
+    }
+    
+    public Link createPageLink(String pageName, Object... overrideContext)
+    {
         // This verifies that the page name is valid.
         Page page = _pageCache.get(pageName);
 
-        return createPageLink(page);
+        return createPageLink(page, overrideContext);
     }
 }
Index: src/main/java/org/apache/tapestry/internal/services/LinkFactory.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/services/LinkFactory.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/services/LinkFactory.java	(working copy)
@@ -49,10 +49,14 @@
      * @param page
      * @return
      */
+    Link createPageLink(Page page, Object... overrideContext);
+    @Deprecated
     Link createPageLink(Page page);
-
+    
     /** Creates a link to a page, given its logical page name. */
+    Link createPageLink(String page, Object... overrideContext);
+    @Deprecated
     Link createPageLink(String page);
-
+    
     void addListener(LinkFactoryListener listener);
 }
Index: src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java	(working copy)
@@ -110,11 +110,16 @@
     {
         return _element.createActionLink(action, forForm, context);
     }
-
+    
     public Link createPageLink(String pageName)
     {
-        return _element.createPageLink(pageName);
+        return _element.createPageLink(pageName, new Object[0]);
     }
+    
+    public Link createPageLink(String pageName, Object... overrideContext)
+    {
+        return _element.createPageLink(pageName, overrideContext);
+    }
 
     public String getCompleteId()
     {
Index: src/main/java/org/apache/tapestry/internal/structure/Page.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/structure/Page.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/structure/Page.java	(working copy)
@@ -126,7 +126,7 @@
             Object... context);
 
     /** Creates a link to the named page. */
-    Link createPageLink(String pageName);
+    Link createPageLink(String pageName, Object... overrideContext);
 
     /**
      * Posts a change to a persistent field.
Index: src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java	(working copy)
@@ -785,11 +785,16 @@
     {
         return _page.createActionLink(this, action, forForm, context);
     }
-
+    
     public Link createPageLink(String pageName)
     {
-        return _page.createPageLink(pageName);
+        return _page.createPageLink(pageName, new Object[0]);
     }
+    
+    public Link createPageLink(String pageName, Object... overrideContext)
+    {
+        return _page.createPageLink(pageName, overrideContext);
+    }
 
     public void enqueueBeforeRenderBody(RenderQueue queue)
     {
Index: src/main/java/org/apache/tapestry/internal/structure/PageImpl.java
===================================================================
--- src/main/java/org/apache/tapestry/internal/structure/PageImpl.java	(revision 508395)
+++ src/main/java/org/apache/tapestry/internal/structure/PageImpl.java	(working copy)
@@ -164,9 +164,9 @@
         return _linkFactory.createActionLink(element, action, forForm, context);
     }
 
-    public Link createPageLink(String pageName)
+    public Link createPageLink(String pageName, Object... overrideContext)
     {
-        return _linkFactory.createPageLink(pageName);
+        return _linkFactory.createPageLink(pageName, overrideContext);
     }
 
     public void persistFieldChange(ComponentResources resources, String fieldName, Object newValue)

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to