Looks plausible. Add it to JIRA so it doesn't get lost!
Cheers,
Nick.
Kristian Marinkovic wrote:
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]