[ 
https://issues.apache.org/jira/browse/TAPESTRY-1429?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jesse Kuhnert updated TAPESTRY-1429:
------------------------------------

    Fix Version/s:     (was: 4.1.3)
                   4.1.4

> Add getLink() to ICallback
> --------------------------
>
>                 Key: TAPESTRY-1429
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1429
>             Project: Tapestry
>          Issue Type: Improvement
>          Components: Core Components
>    Affects Versions: 4.0.2, 4.1.2, 4.2
>            Reporter: Geoff Callender
>             Fix For: 4.1.4
>
>
> I'd like to see a getLink() method added to ICallback so we can do 
> redirect-after-post with the callback.
>       public ILink getLink(IRequestCycle cycle);
> The reason is that I like to keep a "callback stack" as I descend into the 
> pages.  A page can pop its calling page off the stack and often I'd like to 
> redirect to it rather than just activate it.
> Suggested implementation:
> ExternalCallback.java
> ~~~~~~~~~~~~~~~~~
>       public ILink getLink(IRequestCycle cycle)
>       {
>               Defense.notNull(cycle, "cycle");
>               try {
>                       IEngineService service = 
> cycle.getInfrastructure().getServiceMap().getService(Tapestry.EXTERNAL_SERVICE);
>                       ILink link = service.getLink(false, new 
> ExternalServiceParameter(_pageName, _parameters));
>                       return link;
>               }
>               catch (ClassCastException ex) {
>                       throw new 
> ApplicationRuntimeException(CallbackMessages.pageNotExternal(_pageName), ex);
>               }
>       }
> DirectCallback.java
> ~~~~~~~~~~~~~~~
>       public ILink getLink(IRequestCycle cycle)
>       {
>               Defense.notNull(cycle, "cycle");
>         IPage page = cycle.getPage(_pageName);
>         IComponent component = page.getNestedComponent(_componentIdPath);
>         IDirect direct = null;
>         try
>         {
>             direct = (IDirect) component;
>             
>                       IEngineService service = 
> cycle.getInfrastructure().getServiceMap().getService(Tapestry.DIRECT_SERVICE);
>                       ILink link = service.getLink(false, new 
> DirectServiceParameter(direct, _parameters));
>                       return link;
>         }
>         catch (ClassCastException ex)
>         {
>             throw new 
> ApplicationRuntimeException(CallbackMessages.componentNotDirect(component),
>                     component, null, ex);
>         }
>       }
> PageCallback.java
> ~~~~~~~~~~~~~~~
>       public ILink getLink(IRequestCycle cycle)
>       {
>               Defense.notNull(cycle, "cycle");
>               try {
>                       IEngineService service = 
> cycle.getInfrastructure().getServiceMap().getService(Tapestry.PAGE_SERVICE);
>                       ILink link = service.getLink(false, _pageName);
>                       return link;
>               }
>               catch (ClassCastException ex) {
>                       throw new 
> ApplicationRuntimeException(CallbackMessages.pageNotExternal(_pageName), ex);
>               }
>       }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to