[
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]