[
https://issues.apache.org/jira/browse/TAPESTRY-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12571640#action_12571640
]
Howard M. Lewis Ship commented on TAPESTRY-2184:
------------------------------------------------
Ok, this does fail:
public class ActionViaLinkDemo
{
@Persist("flash")
private String _message;
@Inject
private ComponentResources _resources;
Object[]
onPassivate()
{
return new Object[] { };
}
public String getMessage()
{
return _message;
}
void onUpdateMessage(String message)
{
getActionURL();
_message = message;
}
public String getActionURL()
{
Link link = _resources.createActionLink("UpdateMessage", false, "from
getActionURL()");
return link.toURI();
}
}
Which fails inside onUpdateMessage() with:
java.lang.NullPointerException
at
org.apache.tapestry.internal.services.LinkFactoryImpl.collectActivationContextForPage(LinkFactoryImpl.java:225)
at
org.apache.tapestry.internal.services.LinkFactoryImpl.createActionLink(LinkFactoryImpl.java:134)
at
$LinkFactory_118435737b9.createActionLink($LinkFactory_118435737b9.java)
at
org.apache.tapestry.internal.structure.PageImpl.createActionLink(PageImpl.java:156)
at
org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.createActionLink(InternalComponentResourcesImpl.java:123)
at
org.apache.tapestry.integration.app1.pages.ActionViaLinkDemo.getActionURL(ActionViaLinkDemo.java:36)
at
org.apache.tapestry.integration.app1.pages.ActionViaLinkDemo.onUpdateMessage(ActionViaLinkDemo.java:29)
at
org.apache.tapestry.integration.app1.pages.ActionViaLinkDemo.dispatchComponentEvent(ActionViaLinkDemo.java)
at
org.apache.tapestry.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:843)
at
org.apache.tapestry.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1004)
And here's the culprit:
Page activePage = _pageRenderQueue.getRenderingPage();
Which is broken when there is no rendering page.
We'll just assume, for the moment, that the current page is the active page.
There's probably some obscure edge case where that won't work, but I can't
quite envision it right now.
> Invoking createActionLink() in code throws an NullPointerException even
> though using an ActionLink component in the template does not
> -------------------------------------------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2184
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2184
> Project: Tapestry
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.0.10
> Reporter: Angelo Chen
> Assignee: Howard M. Lewis Ship
>
> createActionLink cause exception when it is called in the page class(see
> onActionFromDelete), but works when it is called from the template, this
> works in 5.0.6 and 7, but fails in 5.0.9 and 5.0.10, sample code and error
> follows:
> public class TestPage1 {
> @Inject
> private ComponentResources resources;
> private Object[] _objs;
> public Class onActivate(Object[] obj) { _objs = obj; return null; }
> public Object[] onPassivate() { return _objs;}
> Link onActionFromDelete(Long id) {
> String x = getTheLink(); // this fails with exception
> return null;
> }
> public String getTheLink() {
> Link l = resources.createActionLink("DeleteConfirm", false);
> return l.toURI();
> }
> public Object onDeleteConfirm(Long id) {
> return null;
> }
> }
> template:
> <body>
> <t:ActionLink t:id="Delete" context="1">Delete me</t:ActionLink><br />
> <p>My Link is : ${theLink}</p>
> </body>
> errors:
> java.lang.NullPointerException
> Stack trace
> *
> org.apache.tapestry.internal.services.LinkFactoryImpl.collectActivationContextForPage(LinkFactoryImpl.java:217)
> *
> org.apache.tapestry.internal.services.LinkFactoryImpl.createActionLink(LinkFactoryImpl.java:129)
> *
> org.apache.tapestry.internal.structure.PageImpl.createActionLink(PageImpl.java:156)
--
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]