tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Geoff Callender (JIRA)" <...@tapestry.apache.org>
Subject [jira] Created: (TAPESTRY-1429) Add getLink() to ICallback
Date Wed, 25 Apr 2007 13:22:15 GMT
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


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: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message