Hello!

What exactly is this component trying to do? I couldn't get it by looking
at your code snippet.

Anyway, the probably best way of doing it if you want to create a component
which edits something is to subclass AbstractField.

The error message says you're trying to pass a null object to BeanDisplay
while it renders, so this doesn't seem to be a problem with form submission
at all, but a problem while rendering the page later.

Failure reading parameter 'source' of component
common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
Parameter 'object' of component
common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound


On Thu, Nov 1, 2018 at 4:43 AM abangkis <abang...@gmail.com> wrote:

> Hai guys, still working on my custom component.
>
> How do we let our custom component participate in form submission.
> Apparently there is no onPrepare hook for tapestry custom component.
> http://tapestry.apache.org/component-rendering.html.
>
> I'm reading
>
> http://jumpstart.doublenegative.com.au/jumpstart/examples/component/subformvalidation1
> example. But still haven't grasp the general gist
> about ProcessSubmission/ComponentAction. Calling the prepare method from
> process submission doesn't seems to work. Rendering the component is fine,
> but when submitting the page I receive the error and stack trace bellow.
>
> Any advice? Thanks.
>
> Here's my custom component setup & prepare method:
>
>     private static final ProcessSubmission PROCESS_SUBMISSION = new
> ProcessSubmission();
>
>     // Tapestry calls afterRender() AFTER it renders any components I
> contain (ie. Loop).
>     final void afterRender() {
>
>         // If we are inside a form, ask FormSupport to store
> PROCESS_SUBMISSION in its list of actions to do on submit.
>         // If I contain other components, their actions will already be in
> the list, before PROCESS_SUBMISSION. That is
>         // because this method, afterRender(), is late in the sequence.
> This guarantees PROCESS_SUBMISSION will be
>         // executed on submit AFTER the components I contain are processed
> (which includes their validation).
>
>         if (formSupport != null) {
>             formSupport.store(this, PROCESS_SUBMISSION);
>         }
>     }
>
>     private static class ProcessSubmission implements
> ComponentAction<LoanBundleEditTabs2> {
>         private static final long serialVersionUID = -2132279249191788845L;
>
>         @Override
>         public String toString() {
>             return this.getClass().getSimpleName() + ".ProcessSubmission";
>         }
>
>         @Override
>         public void execute(LoanBundleEditTabs2 component) {
>             component.processSubmission();
>         }
>     }
>
>     private void processSubmission() {
>         // Validate. We ensured in afterRender() that the components I
> contain have already been validated.
>         prepare();
>     }
>
>     @SetupRender
>     void setup() {
>         prepare();
>     }
>
>     void prepare() {
>         Long loanApplicationId = loanApplication.getId();
>         loanApplicationDetail =
> loanApplicationDetailDao.getByApplicationId(loanApplicationId);
>
>         homeAddress =
> loanAddressDao.getHomeAddressByApplicationId(loanApplicationId);
>         homeAddress2 = new AddressModel();
>         addressCopier.copy(homeAddress, homeAddress2);
>
>         mailAddress =
> loanAddressDao.getMailAddressByApplicationId(loanApplicationId);
>         mailAddress2 = new AddressModel();
>         addressCopier.copy(mailAddress, mailAddress2);
>
>         officeAddress =
> loanAddressDao.getOfficeAddressByApplicationId(loanApplicationId);
>         officeAddress2 = new AddressModel();
>         addressCopier.copy(officeAddress, officeAddress2);
>     }
>
> Here's the stack trace
>
> [ERROR] ioc.Registry Failure reading parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null.
> [ERROR] ioc.Registry Operations trace:
> [ERROR] ioc.Registry [ 1] Handling traditional 'action' component event
> request for common/loan/ApplicationSummary:form.
> [ERROR] ioc.Registry [ 2] Triggering event 'action' on
> common/loan/ApplicationSummary:form
> [ERROR] TapestryModule.RequestExceptionHandler Processing of request failed
> with uncaught exception:
> org.apache.tapestry5.ioc.internal.OperationException: Failure reading
> parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
>
> classpath:net/mreunionlabs/gri/server/pages/common/loan/LoanApplicationSummary.tml,
> line 63]
> org.apache.tapestry5.ioc.internal.OperationException: Failure reading
> parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
>
> classpath:net/mreunionlabs/gri/server/pages/common/loan/LoanApplicationSummary.tml,
> line 63]
> at
>
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:186)
> at
>
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:90)
> at
>
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72)
> at
>
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1260)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.invoke(ComponentPageElementResourcesImpl.java:154)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1043)
> at
>
> org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:73)
> at
>
> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
> at $ComponentEventRequestHandler_47d6beafe399.handle(Unknown Source)
> at
>
> org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:76)
> at $ComponentEventRequestHandler_47d6beafe399.handle(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$37.handle(TapestryModule.java:2216)
> at $ComponentEventRequestHandler_47d6beafe399.handle(Unknown Source)
> at $ComponentEventRequestHandler_47d6beafe27e.handle(Unknown Source)
> at
>
> org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
> at
>
> org.apache.tapestry5.internal.services.DeferredResponseRenderer.handleComponentEvent(DeferredResponseRenderer.java:45)
> at $ComponentRequestHandler_47d6beafe280.handleComponentEvent(Unknown
> Source)
> at
>
> org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39)
> at $ComponentRequestHandler_47d6beafe280.handleComponentEvent(Unknown
> Source)
> at
>
> org.apache.tapestry5.internal.services.RequestOperationTracker$1.perform(RequestOperationTracker.java:55)
> at
>
> org.apache.tapestry5.internal.services.RequestOperationTracker$1.perform(RequestOperationTracker.java:52)
> at
>
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.perform(OperationTrackerImpl.java:110)
> at
>
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.perform(PerThreadOperationTracker.java:84)
> at
>
> org.apache.tapestry5.ioc.internal.RegistryImpl.perform(RegistryImpl.java:1266)
> at
>
> org.apache.tapestry5.internal.services.RequestOperationTracker.handleComponentEvent(RequestOperationTracker.java:47)
> at $ComponentRequestHandler_47d6beafe280.handleComponentEvent(Unknown
> Source)
> at
>
> net.mreunionlabs.gri.server.infrastructure.PageProtectionFilter.handleComponentEvent(PageProtectionFilter.java:60)
> at $ComponentRequestFilter_47d6beafe27d.handleComponentEvent(Unknown
> Source)
> at $ComponentRequestHandler_47d6beafe280.handleComponentEvent(Unknown
> Source)
> at $ComponentRequestHandler_47d6beafe236.handleComponentEvent(Unknown
> Source)
> at
>
> org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:48)
> at $Dispatcher_47d6beafe238.dispatch(Unknown Source)
> at $Dispatcher_47d6beafe22d.dispatch(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:305)
> at
>
> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
> at $RequestHandler_47d6beafe22e.service(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.java:846)
> at $RequestHandler_47d6beafe22e.service(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.java:836)
> at $RequestHandler_47d6beafe22e.service(Unknown Source)
> at
>
> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)
> at $RequestHandler_47d6beafe22e.service(Unknown Source)
> at
>
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
> at
>
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
> at
>
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:83)
> at
>
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
> at $RequestHandler_47d6beafe22e.service(Unknown Source)
> at $RequestHandler_47d6beafe223.service(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:256)
> at
>
> org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:45)
> at $HttpServletRequestHandler_47d6beafe225.service(Unknown Source)
> at
> org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)
> at $HttpServletRequestHandler_47d6beafe225.service(Unknown Source)
> at
>
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> at $HttpServletRequestFilter_47d6beafe21f.service(Unknown Source)
> at $HttpServletRequestHandler_47d6beafe225.service(Unknown Source)
> at
>
> org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.java:796)
> at $HttpServletRequestHandler_47d6beafe225.service(Unknown Source)
> at $HttpServletRequestHandler_47d6beafe21e.service(Unknown Source)
> at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:166)
> at
>
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1629)
> at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
> at
>
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
> at
>
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
> at
>
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
> at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
> at
>
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
> at
>
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
> at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> at
>
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
> at
>
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
> at
>
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> at org.eclipse.jetty.server.Server.handle(Server.java:564)
> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
> at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
> at
> org.eclipse.jetty.io
> .AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
> at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
> at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
> at
> org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
> at
>
> org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
> at
>
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
> at
>
> org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
> at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
> at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
> at java.lang.Thread.run(Thread.java:748)
> Caused by: org.apache.tapestry5.runtime.ComponentEventException: Failure
> reading parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
>
> classpath:net/mreunionlabs/gri/server/pages/common/loan/LoanApplicationSummary.tml,
> line 63]
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1126)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$3100(ComponentPageElementImpl.java:57)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1047)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1044)
> at
>
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82)
> ... 89 more
> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> Failure reading parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
> classpath:org/apache/tapestry5/corelib/components/BeanDisplay.tml, line 3]
> at
>
> org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:749)
> at org.apache.tapestry5.corelib.components.Form.onAction(Form.java:516)
> at
>
> org.apache.tapestry5.corelib.components.Form.dispatchComponentEvent(Form.java)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:917)
> at
>
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1102)
> ... 93 more
> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> Failure reading parameter 'source' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0.loop:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
> classpath:org/apache/tapestry5/corelib/components/BeanDisplay.tml, line 3]
> at
>
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:268)
> at
>
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381)
> at
> org.apache.tapestry5.corelib.components.Loop.conduit_get_source(Loop.java)
> at
>
> org.apache.tapestry5.corelib.components.Loop.setupForVolatile(Loop.java:356)
> at org.apache.tapestry5.corelib.components.Loop.access$100(Loop.java:50)
> at org.apache.tapestry5.corelib.components.Loop$2.execute(Loop.java:81)
> at org.apache.tapestry5.corelib.components.Loop$2.execute(Loop.java:76)
> at
>
> org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:738)
> ... 97 more
> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
> classpath:org/apache/tapestry5/corelib/components/BeanDisplay.tml, line 3]
> at
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:67)
> at
>
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:263)
> ... 104 more
> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> Parameter 'object' of component
> common/loan/ApplicationSummary:loanbundleedittabs2.beandisplay_0 is bound
> to null. This parameter is not allowed to be null. [at
>
> classpath:net/mreunionlabs/gri/server/components/gri/LoanBundleEditTabs2.tml,
> line 67]
> at
>
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:276)
> at
>
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381)
> at
>
> org.apache.tapestry5.corelib.components.BeanDisplay.conduit_get_object(BeanDisplay.java)
> at
>
> org.apache.tapestry5.corelib.components.BeanDisplay.getModel(BeanDisplay.java:128)
> at $InternalPropertyConduit_47d6beafe2e9.navigate(Unknown Source)
> at $InternalPropertyConduit_47d6beafe2e9.get(Unknown Source)
> at
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:63)
> ... 105 more
>
>
> --
> http://www.mreunionlabs.net/ <http://www.mreunion-labs.net/>
> twitter : @mreunionlabs @abangkis
> page : https://plus.google.com/104168782385184990771
>


-- 
Thiago

Reply via email to