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

Reply via email to