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

Geoff Callender updated TAPESTRY-1429:
--------------------------------------

    Fix Version/s:     (was: 4.1.4)
                   4.2

OK, perhaps the Fix Version should be set to 4.2?

The best workaround, if it was possible, would be to extend Tapestry, BUT YOU 
CAN'T because the fields are all PRIVATE INSTEAD OF PROTECTED!!!  I've hit this 
same trouble again and again when trying to extend Tapestry.

For example, to work around this ticket I would like to extend ICallback to add 
in the getLink() method, eg.

public interface ICallback2 extends ICallback {
    public ILink getLink(IRequestCycle cycle);
}

and extend the 3 callback classes (DirectCallback, ExternalCallback, and 
PageCallback), eg.

public class DirectCallback2 extends DirectCallback implements ICallback2 {
        public ILink getLink(IRequestCycle cycle) {
                <etc>
        }
}

BUT, the fields I need to use in getLink() are private in the superclass and 
therefore not available.

As I said above, I've hit this same trouble again and again when trying to 
extend Tapestry.  I wonder if it makes sense to address this in design 
guidelines?

> 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.2
>
>
> 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