Hello
I found quite a nice component named ShowErrors from helloworld-taplet
example coming with tapestry 4.0.2 edition, but found it giving quite an
unexpected result when submitting incomplete (or invalid) form the second
time.
Namely there will come a NullPointerException. Could anyone verify it or
explain whats wrong with the following?
Please note that error messages still get displayed the first time - the
exception only comes after submitting the form once more with invalid data.
PS! I'm not subscribed to the list, so I would appreciate adding
[EMAIL PROTECTED] to bcc while answering.
The component referenced through a page like following:
<bean name="delegate" class="
org.apache.tapestry.valid.ValidationDelegate"/>
<component id="errorList" type="ErrorList">
<binding name="delegate" value="ognl:beans.delegate"/>
</component>
ErrorList.jwc
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component-specification PUBLIC
"-//Apache Software Foundation//Tapestry Specification 4.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<component-specification allow-informal-parameters="no" allow-body="no">
<parameter name="delegate" required="true"/>
<property name="errorRenderer"/>
<component id="if" type="If">
<binding name="condition" value=" delegate.hasErrors"/>
<binding name="element" value="literal:ul"/>
</component>
<component id="loop" type="For">
<binding name="source" value="
delegate.fieldTracking.{?inError}.{errorRenderer}"/>
<binding name="value" value="errorRenderer"/>
<binding name="element" value="literal:li"/>
</component>
<component id="error" type="Delegator">
<binding name="delegate" value="ognl:errorRenderer" />
</component>
</component-specification>
ErrorList.html
<ul jwcid="if">
<li jwcid="loop">
<span jwcid="error"/>
</li>
</ul>
Finally the error report for the NullPonterException after submitting
invalid form the second time
org.apache.tapestry.BindingException
Unable to read OGNL expression '<parsed OGNL expression>' of
[EMAIL PROTECTED]/errorList]:
java.lang.NullPointerException
binding: ExpressionBinding[BookEdit/errorList
delegate.fieldTracking.{?inError}.{errorRenderer}]
location: context:/WEB-INF/ErrorList.jwc, line 31, column 86
26 <component id="if" type="If">
27 <binding name="condition" value="delegate.hasErrors"/>
28 <binding name="element" value="literal:ul"/>
29 </component>
30 <component id="loop" type="For">
31 <binding name="source"
value="delegate.fieldTracking.{?inError}.{errorRenderer}"/>
32 <binding name="value" value="errorRenderer"/>
33 <binding name="element" value="literal:li"/>
34 </component>
35 <component id="error" type="Delegator">
36 <binding name="delegate" value="ognl:errorRenderer" />
org.apache.hivemind.ApplicationRuntimeException
Unable to read OGNL expression '<parsed OGNL expression>' of
[EMAIL PROTECTED]/errorList]:
java.lang.NullPointerException
component: [EMAIL PROTECTED]/errorList]
location: context:/WEB-INF/BookEdit.page, line 20, column 45
15 <binding name="listener" value="ognl:listeners.bookFormSubmit" />
16 <binding name="delegate" value="ognl:beans.delegate" />
17 <!-- binding name="clientValidationEnabled" value="true"/ -->
18 </component>
19
20 <component id="errorList" type="ErrorList">
21 <binding name="delegate" value="ognl:beans.delegate"/>
22 </component>
23
24 <component id="titleLabel" type="FieldLabel">
25 <binding name="field" value="component:title"/>
java.lang.NullPointerException
Stack Trace:
* ognl.OgnlRuntime$ClassCache.get(OgnlRuntime.java:144)
* ognl.OgnlRuntime.getHandler(OgnlRuntime.java:1551)
* ognl.OgnlRuntime.getElementsAccessor(OgnlRuntime.java:1518)
* ognl.ASTSelect.getValueBody (ASTSelect.java:53)
* ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
* ognl.SimpleNode.getValue(SimpleNode.java:210)
* ognl.ASTChain.getValueBody(ASTChain.java:109)
* ognl.SimpleNode.evaluateGetValueBody (SimpleNode.java:170)
* ognl.SimpleNode.getValue(SimpleNode.java:210)
* ognl.Ognl.getValue(Ognl.java:333)
* ognl.Ognl.getValue(Ognl.java:310)
* org.apache.tapestry.services.impl.ExpressionEvaluatorImpl.readCompiled(
ExpressionEvaluatorImpl.java:91)
*
$ExpressionEvaluator_10c8ac5eb01.readCompiled($ExpressionEvaluator_10c8ac5eb01.java)
* org.apache.tapestry.binding.ExpressionBinding.resolveExpression(
ExpressionBinding.java :110)
* org.apache.tapestry.binding.ExpressionBinding.getObject(
ExpressionBinding.java:103)
* org.apache.tapestry.components.ForBean.evaluateSourceIterator(
ForBean.java:603)
* org.apache.tapestry.components.ForBean$ReadSourceDataIterator .<init>(
ForBean.java:287)
* org.apache.tapestry.components.ForBean.getStoredData(ForBean.java:278)
* org.apache.tapestry.components.ForBean.getData(ForBean.java:256)
* org.apache.tapestry.components.ForBean.renderComponent (ForBean.java
:107)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java
:617)
* org.apache.tapestry.AbstractComponent.renderBody(
AbstractComponent.java:434)
* org.apache.tapestry.components.IfBean.renderComponent (IfBean.java:86)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java
:617)
* org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java
:92)
* org.apache.tapestry.AbstractComponent.render (AbstractComponent.java
:617)
* org.apache.tapestry.AbstractComponent.renderBody(
AbstractComponent.java:434)
* org.apache.tapestry.form.FormSupportImpl.rewind(FormSupportImpl.java
:564)
* org.apache.tapestry.form.Form.renderComponent (Form.java:226)
* org.apache.tapestry.AbstractComponent.render(AbstractComponent.java
:617)
* org.apache.tapestry.form.Form.rewind(Form.java:327)
* org.apache.tapestry.engine.RequestCycle.rewindForm(RequestCycle.java:439)
* org.apache.tapestry.form.Form.trigger(Form.java:338)
* org.apache.tapestry.engine.DirectService.triggerComponent(
DirectService.java:146)
* org.apache.tapestry.engine.DirectService.service(DirectService.java:132)
* $IEngineService_10c8ac5ea79.service($IEngineService_10c8ac5ea79.java)
* org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(
EngineServiceOuterProxy.java:66)
* org.apache.tapestry.engine.AbstractEngine.service (AbstractEngine.java
:248)
* org.apache.tapestry.services.impl.InvokeEngineTerminator.service(
InvokeEngineTerminator.java:60)
*
$WebRequestServicer_10c8ac5ea57.service($WebRequestServicer_10c8ac5ea57.java)
*
$WebRequestServicer_10c8ac5ea53.service($WebRequestServicer_10c8ac5ea53.java)
*
org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(
WebRequestServicerPipelineBridge.java:56)
*
$ServletRequestServicer_10c8ac5ea37.service($ServletRequestServicer_10c8ac5ea37.java)
* org.apache.tapestry.request.DecodedRequestInjector.service(
DecodedRequestInjector.java:55)
*
$ServletRequestServicerFilter_10c8ac5ea33.service($ServletRequestServicerFilter_10c8ac5ea33.java)
*
$ServletRequestServicer_10c8ac5ea39.service($ServletRequestServicer_10c8ac5ea39.java)
* org.apache.tapestry.multipart.MultipartDecoderFilter.service(
MultipartDecoderFilter.java:52)
*
$ServletRequestServicerFilter_10c8ac5ea31.service($ServletRequestServicerFilter_10c8ac5ea31.java)
*
$ServletRequestServicer_10c8ac5ea39.service($ServletRequestServicer_10c8ac5ea39.java)
* org.apache.tapestry.services.impl.SetupRequestEncoding.service(
SetupRequestEncoding.java:53)
*
$ServletRequestServicerFilter_10c8ac5ea35.service($ServletRequestServicerFilter_10c8ac5ea35.java)
*
$ServletRequestServicer_10c8ac5ea39.service($ServletRequestServicer_10c8ac5ea39.java)
*
$ServletRequestServicer_10c8ac5ea2b.service($ServletRequestServicer_10c8ac5ea2b.java)
* org.apache.tapestry.ApplicationServlet.doService(
ApplicationServlet.java:123)
* org.apache.tapestry.ApplicationServlet.doPost (ApplicationServlet.java
:168)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
* org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (
ApplicationFilterChain.java:252)
* org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:173)
* org.apache.catalina.core.StandardWrapperValve.invoke(
StandardWrapperValve.java:213)
* org.apache.catalina.core.StandardContextValve.invoke(
StandardContextValve.java:178)
* org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:126)
* org.apache.catalina.valves.ErrorReportValve.invoke (
ErrorReportValve.java:105)
* org.apache.catalina.core.StandardEngineValve.invoke(
StandardEngineValve.java:107)
* org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
:148)
* org.apache.coyote.http11.Http11Processor.process (Http11Processor.java
:869)
*
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
(Http11BaseProtocol.java:664)
* org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
PoolTcpEndpoint.java :527)
* org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
LeaderFollowerWorkerThread.java:80)
* org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
ThreadPool.java:684)
* java.lang.Thread.run (Unknown Source)
--
Martin