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