Thanks Josh! You helped me identify that it was an encoder issue on my end.
I appreciate your help. :) Cheers, Levi Josh Canfield wrote: > > The only change I made was making isValid into a property and a > checkbox in the form so I could switch between behaviors. > > Here is the complete code that works for me. > > public class Index { > @Component > private Zone nothingSelectedZone; > > @Component > private Form _parts; > > @Property > private boolean errorVisible; > > @Property > private boolean resultsVisible = true; > > @Property > private boolean _valid; > > @InjectPage > private LoopedForm otherPage; // a random page I have in my > experiments project. > > void onValidateFormFromParts() { > if (_valid) { > _parts.recordError("No items selected."); > } else { > resultsVisible = true; > _parts.clearErrors(); > } > errorVisible = _parts.getHasErrors(); > } > > Object onSuccessFromParts() { > return otherPage; > } > > Object onFailureFromParts() { > return nothingSelectedZone.getBody(); > } > } > > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE html > PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > > <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd" > xmlns="http://www.w3.org/1999/xhtml" > xml:lang="en" > lang="en"> > <head> > <title>Experiment Home</title> > </head> > <body> > > <t:zone t:id="nothingSelectedZone" id="nothingSelectedZone" > visible="${errorVisible}"> > No items have been selected. > </t:zone> > <t:zone t:id="resultsZone" id="resultsZone" visible="${resultsVisible}"> > <form t:id="parts" t:zone="nothingSelectedZone"> > <t:checkbox value="valid"/> > <input type="button" t:type="submit" value="Do It"/> > </form> > </t:zone> > > </body> > </html> > > On Fri, Oct 2, 2009 at 6:03 PM, xfile80303 <l...@grokers.net> wrote: >> >> Hi Josh, >> >> Thanks for looking. >> >> I'm afraid the stack trace I provided is a red herring and does not have >> any >> bearing on the situation. It comes from the fact that my encoder was >> getting purged from the session due to it being set as FLASH only. And >> this >> exception actually only happens after I changed the code from: >> >> <form t:id="parts" t:zone="nothingSelectedZone"> >> to >> <form t:id="parts" t:zone="resultsZone"> >> >> which actually works... it's as if something in the form needs to be >> rebuilt >> after the submit. >> >> You say you were able to get my code to work? As is, or did you need to >> make >> changes? I'd still like to have the flexibility to refresh the >> nothingSelectedZone and not touch the resultsZone. >> >> Cheers, >> >> Levi >> >> >> Josh Canfield wrote: >>> >>> Your example code works fine and the exception you provide makes it >>> look like you're in a loop? >>> >>>> Caused by: java.lang.NullPointerException >>>> at >>>> org.apache.tapestry5.corelib.components.Loop.restoreStateFromStoredClientValue(Loop.java:457) >>> >>> That line from the code: >>> // We assume that if an encoder is available when we rendered, >>> that one will be available >>> // when the form is submitted. >>> Object restoredValue = encoder.toValue(clientValue); >>> >>> Makes me think that you aren't getting an encoder? >>> >>> Can you provide a simple and complete example that breaks? >>> Josh >>> >>> On Fri, Oct 2, 2009 at 4:50 PM, xfile80303 <l...@grokers.net> wrote: >>>> >>>> Okay, I have some more information... >>>> >>>> When I click on the submit button, after the validation error, I see >>>> this >>>> in >>>> the log: >>>> >>>> ERROR [http-8080-5: RequestExceptionHandler]: Processing of request >>>> failed >>>> with uncaught exception: >>>> org.apache.tapestry5.runtime.ComponentEventException >>>> org.apache.tapestry5.runtime.ComponentEventException [at >>>> classpath:com/java/dse/cwp/eos/pages/Search.tml, line 106] >>>> at >>>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1098) >>>> at >>>> org.apache.tapestry5.internal.services.AjaxComponentEventRequestHandler.handle(AjaxComponentEventRequestHandler.java:107) >>>> at >>>> $ComponentEventRequestHandler_12417a4b929.handle($ComponentEventRequestHandler_12417a4b929.java) >>>> at >>>> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42) >>>> at >>>> $ComponentEventRequestHandler_12417a4b92b.handle($ComponentEventRequestHandler_12417a4b92b.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2164) >>>> at >>>> $ComponentEventRequestHandler_12417a4b92b.handle($ComponentEventRequestHandler_12417a4b92b.java) >>>> at >>>> $ComponentEventRequestHandler_12417a4b911.handle($ComponentEventRequestHandler_12417a4b911.java) >>>> at >>>> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43) >>>> at >>>> $ComponentRequestHandler_12417a4b80d.handleComponentEvent($ComponentRequestHandler_12417a4b80d.java) >>>> at >>>> org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46) >>>> at >>>> $Dispatcher_12417a4b819.dispatch($Dispatcher_12417a4b819.java) >>>> at >>>> $Dispatcher_12417a4b80a.dispatch($Dispatcher_12417a4b80a.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:245) >>>> at >>>> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:778) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:767) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:85) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> com.java.dse.cwp.eos.services.EosModule$1.service(EosModule.java:254) >>>> at >>>> $RequestFilter_12417a4b806.service($RequestFilter_12417a4b806.java) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90) >>>> at >>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:81) >>>> at >>>> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) >>>> at >>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103) >>>> at >>>> $RequestHandler_12417a4b80b.service($RequestHandler_12417a4b80b.java) >>>> at >>>> $RequestHandler_12417a4b800.service($RequestHandler_12417a4b800.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:197) >>>> at >>>> org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53) >>>> at >>>> $HttpServletRequestHandler_12417a4b802.service($HttpServletRequestHandler_12417a4b802.java) >>>> at >>>> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) >>>> at >>>> $HttpServletRequestFilter_12417a4b7ff.service($HttpServletRequestFilter_12417a4b7ff.java) >>>> at >>>> $HttpServletRequestHandler_12417a4b802.service($HttpServletRequestHandler_12417a4b802.java) >>>> at >>>> org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:726) >>>> at >>>> $HttpServletRequestHandler_12417a4b802.service($HttpServletRequestHandler_12417a4b802.java) >>>> at >>>> $HttpServletRequestHandler_12417a4b7fd.service($HttpServletRequestHandler_12417a4b7fd.java) >>>> at >>>> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:127) >>>> at >>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>>> at >>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>>> at >>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >>>> at >>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >>>> at >>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >>>> at >>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >>>> at >>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >>>> at >>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) >>>> at >>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) >>>> at >>>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) >>>> at >>>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) >>>> at java.lang.Thread.run(Thread.java:637) >>>> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException [at >>>> classpath:com/java/dse/cwp/eos/pages/Search.tml, line 130] >>>> at >>>> org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:495) >>>> at >>>> org.apache.tapestry5.corelib.components.Form._$advised$onAction(Form.java:378) >>>> at >>>> org.apache.tapestry5.corelib.components.Form$onAction$invocation_12417a50156.invokeAdvisedMethod(Form$onAction$invocation_12417a50156.java) >>>> at >>>> org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:71) >>>> at >>>> org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:37) >>>> at >>>> org.apache.tapestry5.internal.transform.LogWorker$1.advise(LogWorker.java:54) >>>> at >>>> org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:80) >>>> at >>>> org.apache.tapestry5.corelib.components.Form.onAction(Form.java) >>>> at >>>> org.apache.tapestry5.corelib.components.Form.dispatchComponentEvent(Form.java) >>>> at >>>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:910) >>>> at >>>> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1081) >>>> ... 52 more >>>> Caused by: java.lang.NullPointerException >>>> at >>>> org.apache.tapestry5.corelib.components.Loop.restoreStateFromStoredClientValue(Loop.java:457) >>>> at >>>> org.apache.tapestry5.corelib.components.Loop.access$500(Loop.java:44) >>>> at >>>> org.apache.tapestry5.corelib.components.Loop$RestoreStateFromStoredClientValue.execute(Loop.java:165) >>>> at >>>> org.apache.tapestry5.corelib.components.Loop$RestoreStateFromStoredClientValue.execute(Loop.java:154) >>>> at >>>> org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:480) >>>> ... 62 more >>>> >>>> >>>> I would really appreciate some help understanding why this is broken. >>>> >>>> Thanks, >>>> >>>> Levi >>>> >>>> >>>> xfile80303 wrote: >>>>> >>>>> Hello all, >>>>> >>>>> I'm seing some interesting behavior I hope you can help me sort out. >>>>> >>>>> I have a form which I would like to display an error message (custom) >>>>> should the form validation fail. I'd like to do this via AJAX since >>>>> the >>>>> contents of the form are created via AJAX and refreshing the page to >>>>> display this error message will lose this context. >>>>> >>>>> So, I have something like this: >>>>> >>>>> <t:zone t:id="nothingSelectedZone" id="nothingSelectedZone" >>>>> visible="${errorVisible}"> >>>>> No items have been selected. >>>>> </t:zone> >>>>> >>>>> <t:zone t:id="resultsZone" id="resultsZone" >>>>> visible="${resultsVisible}"> >>>>> <form t:id="parts" t:zone="nothingSelectedZone"> >>>>> <input type="button" t:type="submit" value="Do It"/> >>>>> </form> >>>>> </t:zone> >>>>> >>>>> void onValidateFormFromParts() >>>>> { >>>>> if (isValid()) >>>>> { >>>>> _parts.recordError("No items selected."); >>>>> } >>>>> else >>>>> { >>>>> _parts.clearErrors(); >>>>> } >>>>> errorVisible = _parts.getHasErrors(); >>>>> } >>>>> >>>>> Object onSuccessFromParts() >>>>> { >>>>> return otherPage; >>>>> } >>>>> >>>>> Object onFailureFromParts() >>>>> { >>>>> return nothingSelectedZone.getBody(); >>>>> } >>>>> >>>>> If there's no error with validation, the success method gets called >>>>> fine, >>>>> and I am redirected to the otherPage. >>>>> If there is an error with validation, the nothingSelectedZone is >>>>> updated >>>>> and the error message is displayed. >>>>> However, if, after a validation error I try to re-submit the form, >>>>> nothing >>>>> happens at all. I've put breakpoints in my debugger on these three >>>>> methods and they don't get hit in this case. It's as if the form >>>>> submit >>>>> is not taking place after the initial validation error. >>>>> >>>>> I'd love some input. >>>>> >>>>> Thanks, >>>>> >>>>> Levi >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://n2.nabble.com/T5-1-AJAX-Form-Validation-tp3753039p3758403.html >>>> Sent from the Tapestry Users 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 >>>> >>>> >>> >>> >>> >>> -- >>> -- >>> TheDailyTube.com. Sign up and get the best new videos on the internet >>> delivered fresh to your inbox. >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> >>> >> >> -- >> View this message in context: >> http://n2.nabble.com/T5-1-AJAX-Form-Validation-tp3753039p3758648.html >> Sent from the Tapestry Users 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 >> >> > > > > -- > -- > TheDailyTube.com. Sign up and get the best new videos on the internet > delivered fresh to your inbox. > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > -- View this message in context: http://n2.nabble.com/T5-1-AJAX-Form-Validation-tp3753039p3771514.html Sent from the Tapestry Users 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