Hi howard, i think i was able to localize the root cause of the exception.... if you confirm it i'll add a JIRA
ComponentPageElementImpl is responsible for calling the render phase methods of the components. It calls the setupRender method on the attached Mixins then the components and then the Mixins that have a @MixinAfter annotation. If in this phase the setupRender of a Mixin returns a boolean value that will be saved into the Event object and in case of a "false" the setupRender calls of the subsequent components will be aborted. During the "inverse" lifecycle the order is simply reversed and the render phase method of the Mixin with @MixinAfter annotation is called, then the render phase method of the component and then the method of the Mixin is called. The problem is now that the "inverse" render phase methods are getting called without checking whether the corresponding other render phase methods have been executed. So in my case the cleanupRender method of the Form component gets called although i have short-circuited the beginRender method with my Mixin because there is now state available that indicates that the beginRender method of the Form component has NOT been executed. private void invoke(boolean reverse, ComponentCallback callback) { .... Iterator<Component> i = reverse ? InternalUtils.reverseIterator(_components) : _components.iterator(); while (i.hasNext()) callback.run(i.next()); A possible solution would be to create a List that contains those components whose render phase methods really have been executed. This list is then used in the "inverse" lifecycle. g, kris Kristian Marinkovic <[EMAIL PROTECTED]> 03.10.2007 17:22 Bitte antworten an "Tapestry users" <users@tapestry.apache.org> An "Tapestry users" <users@tapestry.apache.org> Kopie Thema T5: Mixin on Form does not work as expected sure... sorry i forgot.. org.apache.tapestry.ioc.internal.util.TapestryException location classpath:com/poi/cross/adm/licensing/components/LicenseEditor.tml, line 23, column 35 18 </tr> 19 </thead> 20 <tfoot> 21 <tr> 22 <td colspan="5" class="action"> 23 <form t:id="orderForm"> 24 License Ordering: 25 <input t:id="amount" type="text" maxlength="3" size="4" /> 26 <a t:id="neworder">order</a> 27 </form> 28 </td> 17:21:25,075 ERROR License:66 - Render queue error in CleanupRender[License:prodlicense.orderform]: org.apache.tapestry.ioc.internal.util.TapestryException org.apache.tapestry.ioc.internal.util.TapestryException [at classpath:com/poi/cross/adm/licensing/components/LicenseEditor.tml, line 23, column 35] at org.apache.tapestry.internal.structure.ComponentPageElementImpl.invoke(ComponentPageElementImpl.java:935) at org.apache.tapestry.internal.structure.ComponentPageElementImpl.access$0(ComponentPageElementImpl.java:915) at org.apache.tapestry.internal.structure.ComponentPageElementImpl$11.render(ComponentPageElementImpl.java:392) at org.apache.tapestry.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:58) at org.apache.tapestry.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:40) at $PageMarkupRenderer_11566735535.renderPageMarkup($PageMarkupRenderer_11566735535.java) at org.apache.tapestry.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:71) at $PageResponseRenderer_11566735509.renderPageResponse($PageResponseRenderer_11566735509.java) at org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:81) at $PageRenderRequestHandler_11566735501.handle($PageRenderRequestHandler_11566735501.java) at org.apache.tapestry.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:72) at $Dispatcher_11566735505.dispatch($Dispatcher_11566735505.java) at $Dispatcher_115667354f7.dispatch($Dispatcher_115667354f7.java) at org.apache.tapestry.services.TapestryModule$13.service(TapestryModule.java:1099) at com.poi.cross.adm.licensing.services.AppModule$2.service(AppModule.java:44) at $RequestFilter_115667354f5.service($RequestFilter_115667354f5.java) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at com.poi.cross.adm.licensing.services.AppModule$1.service(AppModule.java:28) at $RequestFilter_115667354f6.service($RequestFilter_115667354f6.java) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:679) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:84) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:97) at org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:1) at org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77) at org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:110) at $RequestHandler_115667354f8.service($RequestHandler_115667354f8.java) at $RequestHandler_115667354ef.service($RequestHandler_115667354ef.java) at org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:1077) at $HttpServletRequestHandler_115667354ee.service($HttpServletRequestHandler_115667354ee.java) at org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:136) at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821) at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568) at org.mortbay.http.HttpContext.handle(HttpContext.java:1530) at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633) at org.mortbay.http.HttpContext.handle(HttpContext.java:1482) at org.mortbay.http.HttpServer.service(HttpServer.java:909) at org.mortbay.http.HttpConnection.service(HttpConnection.java:820) at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837) at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245) at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) Caused by: java.util.NoSuchElementException at java.util.LinkedList.remove(LinkedList.java:644) at java.util.LinkedList.removeFirst(LinkedList.java:134) at org.apache.tapestry.internal.services.EnvironmentImpl.pop(EnvironmentImpl.java:85) at $Environment_11566735537.pop($Environment_11566735537.java) at $Environment_115667354dd.pop($Environment_115667354dd.java) at org.apache.tapestry.corelib.components.Form.cleanupRender(Form.java:296) at org.apache.tapestry.corelib.components.Form.cleanupRender(Form.java) at org.apache.tapestry.internal.structure.ComponentPageElementImpl$11$1.run(ComponentPageElementImpl.java:388) at org.apache.tapestry.internal.structure.ComponentPageElementImpl.invoke(Compo > A stack trace would be helpful. An: users@tapestry.apache.org Von: Kristian Marinkovic <[EMAIL PROTECTED]> Datum: 03.10.2007 03:52PM Thema: T5: Mixin on Form does not work as expected hi, i get an exception from the Form.cleanupRender method although i have a Mixin attached that returns false on setupRender. as i understand the documentation correctly the Form component should never enter the cleanupRender method/event... can someone point me to my error? i'm trying to short-circuit the form rendering when a certain state occurs thanks g, kris code: page: @Component(parameters={"tracker=tracker","Editable.edit=display"}) @MixinClasses(Editable.class) private Form orderForm; Editable Mixin: public class Editable { ... @Parameter(defaultPrefix=TapestryConstants.PROP_BINDING_PREFIX,value="true") private boolean edit; boolean setupRender(MarkupWriter writer) { if(!edit) writer.write(value); return edit; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]