Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
4.0.2, 4.1.2, 4.2
-
None
Description
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); }
}