You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Ben Dotte (JIRA)" <ta...@jakarta.apache.org> on 2007/02/08 18:24:06 UTC

[jira] Created: (TAPESTRY-1259) EventListener generates duplicate javascript with page caching on

EventListener generates duplicate javascript with page caching on
-----------------------------------------------------------------

                 Key: TAPESTRY-1259
                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1259
             Project: Tapestry
          Issue Type: Bug
          Components: XHR/dhtml/Ajax
    Affects Versions: 4.1.2
         Environment: Tapestry 4.1.2-20070121 snapshot, Win XP, Firefox 2
            Reporter: Ben Dotte


This may be related to TAPESTRY-1241 and/or TAPESTRY-1100. I have an EventListener for an onclick event that is supposed to update a string on the page when a link is clicked. When page caching is turned off, this works fine. When page pooling is turned on, duplicate chunks of javascript get output into the HTML depending on how deeply nested the component is. I have seen the exact same javascript output 2 or 3 times depending on where I put the link that is supposed to trigger the EventListener. 

Here is my link and string to get updated:
<sessionData jwcid="@If" condition="prop:collectiveVisit.user.widenDev">
	<a jwcid="sessionData@Any" href="javascript:void(0);">View Hibernate Session Entities</a>
	<div id="theSessionData"><text jwcid="theSessionData@Insert" value="prop:theSessionData" mode="ognl:@org.apache.tapestry.components.InsertMode@BREAK" /></div>
</sessionData>

Here is the backing java code:
public abstract boolean isShowSessionData();
public abstract void setShowSessionData(boolean val);
@EventListener(targets="sessionData", events="onclick")
public void sessionDataClicked(IRequestCycle cycle)
{
	setShowSessionData(true);
	cycle.getResponseBuilder().updateComponent("theSessionData");
}	
public String getTheSessionData()
{
	if (isShowSessionData())
	{
		return getSessionUtil().getSessionEntities();
	}
	return "";
}

Here is an example of the duplicate javascript from the rendered HTML output:

tapestry.cleanConnect(dojo.byId("sessionData"), "onclick", "event709189172");
                tapestry.event709189172=function(e){
                    var content={beventname:"onclick"};
                    tapestry.event.buildEventProperties(e, content);
                    if (!content["beventtarget.id"]) {
                    	content["beventtarget.id"]="sessionData";
                    }
                    tapestry.bind("/directevent.svc?component=border.sessionData&page=DirectorAccount&session=T", content);
                };
                dojo.event.connect(dojo.byId("sessionData"), "onclick", tapestry, "event709189172");
tapestry.cleanConnect(dojo.byId("sessionData"), "onclick", "event709189172");
                tapestry.event709189172=function(e){
                    var content={beventname:"onclick"};
                    tapestry.event.buildEventProperties(e, content);
                    if (!content["beventtarget.id"]) {
                    	content["beventtarget.id"]="sessionData";
                    }
                    tapestry.bind("/directevent.svc?component=border.sessionData&page=DirectorAccount&session=T", content);
                };
                dojo.event.connect(dojo.byId("sessionData"), "onclick", tapestry, "event709189172");});

As a result, when page caching is turned on (-Dorg.apache.tapestry.disable-caching=false), the string on the page never gets updated and I get a NullPointerException in the console:

java.lang.NullPointerException
	at org.apache.tapestry.internal.event.impl.ComponentEventInvoker.invokeComponentListeners(ComponentEventInvoker.java:148)
	at org.apache.tapestry.internal.event.impl.ComponentEventInvoker.invokeListeners(ComponentEventInvoker.java:60)
	at $IComponentEventInvoker_110a2303c0a.invokeListeners($IComponentEventInvoker_110a2303c0a.java)
	at org.apache.tapestry.AbstractComponent.triggerEvent(AbstractComponent.java:879)
	at org.apache.tapestry.engine.DirectEventService.triggerComponent(DirectEventService.java:160)
	at org.apache.tapestry.engine.DirectEventService.service(DirectEventService.java:137)
	at $IEngineService_110a2303b97.service($IEngineService_110a2303b97.java)
	at org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77)
	at org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72)
	at org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:246)
	at org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54)
	at $WebRequestServicer_110a2303b64.service($WebRequestServicer_110a2303b64.java)
	at $WebRequestServicer_110a2303b60.service($WebRequestServicer_110a2303b60.java)
	at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61)
	at $ServletRequestServicer_110a2303b42.service($ServletRequestServicer_110a2303b42.java)
	at org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
	at $ServletRequestServicerFilter_110a2303b3e.service($ServletRequestServicerFilter_110a2303b3e.java)
	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
	at collective.ui.custom.HibernateFilter.service(HibernateFilter.java:37)
	at $ServletRequestServicerFilter_110a2303b3c.service($ServletRequestServicerFilter_110a2303b3c.java)
	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
	at collective.ui.custom.LuceneIndexFilter.service(LuceneIndexFilter.java:24)
	at $ServletRequestServicerFilter_110a2303b3a.service($ServletRequestServicerFilter_110a2303b3a.java)
	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
	at org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
	at $ServletRequestServicerFilter_110a2303b38.service($ServletRequestServicerFilter_110a2303b38.java)
	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
	at org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
	at $ServletRequestServicerFilter_110a2303b40.service($ServletRequestServicerFilter_110a2303b40.java)
	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
	at $ServletRequestServicer_110a2303b31.service($ServletRequestServicer_110a2303b31.java)
	at org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
	at collective.ui.CollectiveApplicationServlet.doService(CollectiveApplicationServlet.java:71)
	at org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427)
	at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:832)
	at collective.servlet.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:32)
	at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:823)
	at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:473)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:556)
	at org.mortbay.http.HttpContext.handle(HttpContext.java:1563)
	at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:623)
	at org.mortbay.http.HttpContext.handle(HttpContext.java:1515)
	at org.mortbay.http.HttpServer.service(HttpServer.java:956)
	at org.mortbay.http.HttpConnection.service(HttpConnection.java:814)
	at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:981)
	at org.mortbay.http.HttpConnection.handle(HttpConnection.java:831)
	at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244)
	at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
	at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)

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


[jira] Resolved: (TAPESTRY-1259) EventListener generates duplicate javascript with page caching on

Posted by "Ben Dotte (JIRA)" <ta...@jakarta.apache.org>.
     [ https://issues.apache.org/jira/browse/TAPESTRY-1259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ben Dotte resolved TAPESTRY-1259.
---------------------------------

       Resolution: Duplicate
    Fix Version/s: 4.1.2

I think this is a duplicate of TAPESTRY-1241 based on the latest comments. Since that case has (or will be) fixed, I am marking this issue as resolved.

> EventListener generates duplicate javascript with page caching on
> -----------------------------------------------------------------
>
>                 Key: TAPESTRY-1259
>                 URL: https://issues.apache.org/jira/browse/TAPESTRY-1259
>             Project: Tapestry
>          Issue Type: Bug
>          Components: XHR/dhtml/Ajax
>    Affects Versions: 4.1.2
>         Environment: Tapestry 4.1.2-20070121 snapshot, Win XP, Firefox 2
>            Reporter: Ben Dotte
>             Fix For: 4.1.2
>
>
> This may be related to TAPESTRY-1241 and/or TAPESTRY-1100. I have an EventListener for an onclick event that is supposed to update a string on the page when a link is clicked. When page caching is turned off, this works fine. When page pooling is turned on, duplicate chunks of javascript get output into the HTML depending on how deeply nested the component is. I have seen the exact same javascript output 2 or 3 times depending on where I put the link that is supposed to trigger the EventListener. 
> Here is my link and string to get updated:
> <sessionData jwcid="@If" condition="prop:collectiveVisit.user.widenDev">
> 	<a jwcid="sessionData@Any" href="javascript:void(0);">View Hibernate Session Entities</a>
> 	<div id="theSessionData"><text jwcid="theSessionData@Insert" value="prop:theSessionData" mode="ognl:@org.apache.tapestry.components.InsertMode@BREAK" /></div>
> </sessionData>
> Here is the backing java code:
> public abstract boolean isShowSessionData();
> public abstract void setShowSessionData(boolean val);
> @EventListener(targets="sessionData", events="onclick")
> public void sessionDataClicked(IRequestCycle cycle)
> {
> 	setShowSessionData(true);
> 	cycle.getResponseBuilder().updateComponent("theSessionData");
> }	
> public String getTheSessionData()
> {
> 	if (isShowSessionData())
> 	{
> 		return getSessionUtil().getSessionEntities();
> 	}
> 	return "";
> }
> Here is an example of the duplicate javascript from the rendered HTML output:
> tapestry.cleanConnect(dojo.byId("sessionData"), "onclick", "event709189172");
>                 tapestry.event709189172=function(e){
>                     var content={beventname:"onclick"};
>                     tapestry.event.buildEventProperties(e, content);
>                     if (!content["beventtarget.id"]) {
>                     	content["beventtarget.id"]="sessionData";
>                     }
>                     tapestry.bind("/directevent.svc?component=border.sessionData&page=DirectorAccount&session=T", content);
>                 };
>                 dojo.event.connect(dojo.byId("sessionData"), "onclick", tapestry, "event709189172");
> tapestry.cleanConnect(dojo.byId("sessionData"), "onclick", "event709189172");
>                 tapestry.event709189172=function(e){
>                     var content={beventname:"onclick"};
>                     tapestry.event.buildEventProperties(e, content);
>                     if (!content["beventtarget.id"]) {
>                     	content["beventtarget.id"]="sessionData";
>                     }
>                     tapestry.bind("/directevent.svc?component=border.sessionData&page=DirectorAccount&session=T", content);
>                 };
>                 dojo.event.connect(dojo.byId("sessionData"), "onclick", tapestry, "event709189172");});
> As a result, when page caching is turned on (-Dorg.apache.tapestry.disable-caching=false), the string on the page never gets updated and I get a NullPointerException in the console:
> java.lang.NullPointerException
> 	at org.apache.tapestry.internal.event.impl.ComponentEventInvoker.invokeComponentListeners(ComponentEventInvoker.java:148)
> 	at org.apache.tapestry.internal.event.impl.ComponentEventInvoker.invokeListeners(ComponentEventInvoker.java:60)
> 	at $IComponentEventInvoker_110a2303c0a.invokeListeners($IComponentEventInvoker_110a2303c0a.java)
> 	at org.apache.tapestry.AbstractComponent.triggerEvent(AbstractComponent.java:879)
> 	at org.apache.tapestry.engine.DirectEventService.triggerComponent(DirectEventService.java:160)
> 	at org.apache.tapestry.engine.DirectEventService.service(DirectEventService.java:137)
> 	at $IEngineService_110a2303b97.service($IEngineService_110a2303b97.java)
> 	at org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77)
> 	at org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72)
> 	at org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:246)
> 	at org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54)
> 	at $WebRequestServicer_110a2303b64.service($WebRequestServicer_110a2303b64.java)
> 	at $WebRequestServicer_110a2303b60.service($WebRequestServicer_110a2303b60.java)
> 	at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61)
> 	at $ServletRequestServicer_110a2303b42.service($ServletRequestServicer_110a2303b42.java)
> 	at org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
> 	at $ServletRequestServicerFilter_110a2303b3e.service($ServletRequestServicerFilter_110a2303b3e.java)
> 	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
> 	at collective.ui.custom.HibernateFilter.service(HibernateFilter.java:37)
> 	at $ServletRequestServicerFilter_110a2303b3c.service($ServletRequestServicerFilter_110a2303b3c.java)
> 	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
> 	at collective.ui.custom.LuceneIndexFilter.service(LuceneIndexFilter.java:24)
> 	at $ServletRequestServicerFilter_110a2303b3a.service($ServletRequestServicerFilter_110a2303b3a.java)
> 	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
> 	at org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
> 	at $ServletRequestServicerFilter_110a2303b38.service($ServletRequestServicerFilter_110a2303b38.java)
> 	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
> 	at org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
> 	at $ServletRequestServicerFilter_110a2303b40.service($ServletRequestServicerFilter_110a2303b40.java)
> 	at $ServletRequestServicer_110a2303b44.service($ServletRequestServicer_110a2303b44.java)
> 	at $ServletRequestServicer_110a2303b31.service($ServletRequestServicer_110a2303b31.java)
> 	at org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
> 	at collective.ui.CollectiveApplicationServlet.doService(CollectiveApplicationServlet.java:71)
> 	at org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:104)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
> 	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427)
> 	at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:832)
> 	at collective.servlet.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:32)
> 	at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:823)
> 	at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:473)
> 	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:556)
> 	at org.mortbay.http.HttpContext.handle(HttpContext.java:1563)
> 	at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:623)
> 	at org.mortbay.http.HttpContext.handle(HttpContext.java:1515)
> 	at org.mortbay.http.HttpServer.service(HttpServer.java:956)
> 	at org.mortbay.http.HttpConnection.service(HttpConnection.java:814)
> 	at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:981)
> 	at org.mortbay.http.HttpConnection.handle(HttpConnection.java:831)
> 	at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244)
> 	at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> 	at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)

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