Hi again. Should have read the documentation properly: the clientid is available only after the component has rendered itself.
Sorry for bothering, I'll close the JIRA now. - Ville Ville Virtanen wrote: > > Hello all. > > I have opened JIRA with instructions to replicate. See > > https://issues.apache.org/jira/browse/TAP5-438 > > for more information. > > - Ville > > Ps. Can someone please confirm that this replicates, or is it just my > environment? It's hard to believe that this kind of bug would have been > unnoticed for so long.. I'm running the test using production-mode = > false. > > > Ville Virtanen wrote: >> >> Forgot to mention that I'm using 5.0.18. >> >> - Ville >> >> >> Ville Virtanen wrote: >>> >>> Hello, >>> >>> I have a mixin that takes two Any components as parameters. As long as >>> the Any components are *before* the mixin in the template everything is >>> ok, but if I move the Any component after the mixin (after the component >>> that contains the mixin) it throws nullpointer while trying to access >>> the client id. >>> >>> Small part from Any.java: >>> public String getClientId() >>> { >>> if (uniqueId == null) >>> { >>> uniqueId = renderSupport.allocateClientId(clientId); >>> anyElement.forceAttributes("id", uniqueId); >>> } >>> >>> return uniqueId; >>> } >>> >>> The anyElement is always null if the mixin is before the anyElement in >>> the template. Should the any component do some initialization there if >>> anyElement is null? >>> >>> - Ville >>> >>> The mixin: >>> @Parameter(allowNull=true,defaultPrefix="component") >>> private Any sumField; >>> >>> @Parameter(allowNull=true,defaultPrefix="component") >>> private Any priceField; >>> >>> /** >>> * The field component to which this mixin is attached. >>> */ >>> @InjectContainer >>> private ClientElement clientElement; >>> >>> @Environmental >>> private RenderSupport renderSupport; >>> >>> @Inject >>> private ComponentResources componentResources; >>> >>> void afterRender(MarkupWriter writer) throws Exception >>> { >>> String df = >>> JSUtil.commaSeparatedListToJSStringArray(disableFields); >>> String ccf = >>> JSUtil.commaSeparatedListToJSStringArray(classChangeFields); >>> String sumFieldString = ""; >>> if(componentResources.isBound("sumField")){ >>> sumFieldString = sumField.getClientId(); >>> } >>> String priceFieldString = ""; >>> if(componentResources.isBound("priceField")){ >>> priceFieldString = priceField.getClientId(); >>> } >>> >>> renderSupport.addScript("disableAndChangeElements('%s', '%s', >>> '%s', %s, %s, '%s', '%s');", clientElement.getClientId(), >>> enabledCssClass, disabledCssClass, ccf, df, sumFieldString, >>> priceFieldString); >>> } >>> >>> And the stacktrace: >>> * >>> org.apache.tapestry5.corelib.components.Any.getClientId(Any.java:75) >>> * >>> com.orient.web.customer.mixins.DisableAndChangeClass.afterRender(DisableAndChangeClass.java:63) >>> * >>> com.orient.web.customer.mixins.DisableAndChangeClass.afterRender(DisableAndChangeClass.java) >>> * >>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$6$1.run(ComponentPageElementImpl.java:203) >>> * >>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:925) >>> * >>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$200(ComponentPageElementImpl.java:50) >>> * >>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$6.render(ComponentPageElementImpl.java:207) >>> * >>> org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72) >>> * >>> org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:121) >>> * >>> org.apache.tapestry5.services.TapestryModule$19.renderMarkup(TapestryModule.java:1200) >>> * >>> org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1580) >>> * >>> org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1561) >>> * >>> org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1543) >>> * >>> org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1525) >>> * >>> org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1495) >>> * >>> org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:64) >>> * >>> org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:57) >>> * >>> org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:59) >>> * >>> org.apache.tapestry5.services.TapestryModule$35.handle(TapestryModule.java:1779) >>> * >>> com.orient.framework.tapestry.filter.ProtectedPageFilterImpl.handle(ProtectedPageFilterImpl.java:51) >>> * >>> org.apache.tapestry5.internal.services.PageRenderDispatcher.process(PageRenderDispatcher.java:92) >>> * >>> org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:71) >>> * >>> org.apache.tapestry5.services.TapestryModule$17.service(TapestryModule.java:1029) >>> * >>> org.apache.tapestry5.internal.services.LocalizationFilter.service(LocalizationFilter.java:42) >>> * >>> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) >>> * >>> org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:621) >>> * >>> org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:611) >>> * >>> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85) >>> * >>> com.orient.web.customer.services.CustomerclientModule$1.service(CustomerclientModule.java:334) >>> * >>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:93) >>> * >>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:84) >>> * >>> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83) >>> * >>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:106) >>> * >>> org.apache.tapestry5.services.TapestryModule$16.service(TapestryModule.java:1007) >>> * >>> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44) >>> * >>> com.orient.web.customer.services.CustomerclientModule$3.service(CustomerclientModule.java:393) >>> * >>> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) >>> * >>> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:179) >>> * >>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) >>> * >>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) >>> * >>> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) >>> * >>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) >>> * >>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:756) >>> * >>> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) >>> * >>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) >>> * >>> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) >>> * >>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) >>> * org.mortbay.jetty.Server.handle(Server.java:324) >>> * >>> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502) >>> * >>> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:826) >>> * org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:523) >>> * >>> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) >>> * >>> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377) >>> * >>> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) >>> * >>> org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:635) >>> * >>> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497) >>> >>> >>> >> >> > > -- View this message in context: http://www.nabble.com/-T5--Any-component-nullpointer-tp21255662p21349617.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org