Hi,

I'm currently trying to create a form using a loop, and I encountered some
problems on the submit of my form.

So here's my procedure:
- if the List is null, creation of a List (in onActivate()) of CheckText (a
wrapper containing three fields: id, text and ticked).
- in the .tml, the loop in the form loops on the list, and the
currentText.ticked is used to set the checkbox
- when I submit, all the checkboxes are verified and if one is not, an
error is displayed

I got an encoder, which is declared in AppModule.java

Here are my sources:

TestList.java :

public class TestList {
@Inject
private AlertManager alertManager;

@Persist
@Property
private List<CheckText> list;

@Property
private CheckText currentText;

@InjectComponent
private Form form;

@OnEvent(value = EventConstants.ACTIVATE)
public void initOnActivate() {
if (list == null) {
list = new ArrayList<>();
CheckText newtext;
for (int i = 0; i < 5; i++) {
newtext = new CheckText();
newtext.setId(i);
newtext.setText("Test n°" + i);
newtext.setTicked(false);
list.add(newtext);
}
}
}

@OnEvent(value = EventConstants.SUCCESS)
public void submit() {
for (CheckText text : list) {
if (!text.isTicked()) {
form.recordError("Error on " + text.getText());
}
}

}

public Object onSuccessFromForm() {
alertManager.alert(Duration.SINGLE, Severity.INFO, "Yee haa");
return null;
}
}

TestList.tml:

<t:alerts/>
<t:form t:id="form">
<t:errors/>

<t:loop t:source="list" t:value="currentText">
<t:checkbox t:id="textToCheck" t:value="currentText.ticked"
label="prop:currentText.text"
/>
<t:label for="textToCheck" />
<br/>
</t:loop>
 <t:submit t:id="submitCheck"/>
</t:form>

CheckTextEncoder.java:

public class CheckTextEncoder implements ValueEncoder<CheckText>,
ValueEncoderFactory<CheckText> {

private Map<Long, CheckText> values;

public CheckTextEncoder() {
values = new HashMap<>();
}

@Override
public ValueEncoder<CheckText> create(Class<CheckText> type) {
return this;
}

@Override
public String toClient(CheckTextvalue) {
Long id = value.getId();
values.put(id, value);
return String.valueOf(id);
}

@Override
public CheckText toValue(String clientValue) {
return values.get(clientValue);
}

}


My problem is on the submit : I got a NPE on currentText, and I really
don't understand how can there be one.

Here's the full stack :

ERROR][01/10/2013 16:21:51][org.apache.tapestry5.ioc.Registry]
(OperationTrackerImpl.java:log:127)
Failure writing parameter 'value' of component TestList:textToCheck:
Property 'currentText' (within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
[ERROR][01/10/2013 16:21:51][org.apache.tapestry5.ioc.Registry]
(OperationTrackerImpl.java:log:128)
Operations trace:
[ERROR][01/10/2013 16:21:51][org.apache.tapestry5.ioc.Registry]
(OperationTrackerImpl.java:log:137)
[ 1] Triggering event 'action' on TestList:form
[ERROR][01/10/2013
16:21:52][org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler]
(DefaultRequestExceptionHandler.java:handleRequestException:63)
Processing of request failed with uncaught exception: Failure writing
parameter 'value' of component TestList:textToCheck: Property 'currentText'
(within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
org.apache.tapestry5.ioc.internal.OperationException: Failure writing
parameter 'value' of component TestList:textToCheck: Property 'currentText'
(within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.invoke(ComponentPageElementResourcesImpl.java:146)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1058)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:81)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:42)
~[tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_664af085b354.handle(Unknown Source)
~[na:na]
at
org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42)
~[tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_664af085b354.handle(Unknown Source)
~[na:na]
at
org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75)
~[tapestry-upload-5.3.7.jar:na]
at $ComponentEventRequestHandler_664af085b354.handle(Unknown Source)
~[na:na]
at
org.apache.tapestry5.services.TapestryModule$41.handle(TapestryModule.java:2476)
~[tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_664af085b354.handle(Unknown Source)
~[na:na]
at $ComponentEventRequestHandler_664af085b320.handle(Unknown Source)
~[na:na]
at
org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39)
~[tapestry-core-5.3.7.jar:na]
at $ComponentRequestHandler_664af085b322.handleComponentEvent(Unknown
Source) ~[na:na]
at $ComponentRequestHandler_664af085b2e4.handleComponentEvent(Unknown
Source) ~[na:na]
at
org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46)
~[tapestry-core-5.3.7.jar:na]
at $Dispatcher_664af085b2e8.dispatch(Unknown Source) ~[na:na]
at $Dispatcher_664af085b2e1.dispatch(Unknown Source) ~[na:na]
at
org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:302)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
~[tapestry-core-5.3.7.jar:na]
at $RequestHandler_664af085b2e2.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:902)
~[tapestry-core-5.3.7.jar:na]
at $RequestHandler_664af085b2e2.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:892)
~[tapestry-core-5.3.7.jar:na]
at $RequestHandler_664af085b2e2.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)
~[tapestry-core-5.3.7.jar:na]
at $RequestHandler_664af085b2e2.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
~[tapestry-core-5.3.7.jar:na]
at $RequestHandler_664af085b2e2.service(Unknown Source) ~[na:na]
at $RequestHandler_664af085b2d6.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:253)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44)
~[tapestry-upload-5.3.7.jar:na]
at $HttpServletRequestHandler_664af085b2d8.service(Unknown Source) ~[na:na]
at
org.got5.tapestry5.jquery.services.AjaxUploadServletRequestFilter.service(AjaxUploadServletRequestFilter.java:27)
~[tapestry5-jquery-3.3.7.jar:na]
at $HttpServletRequestHandler_664af085b2d8.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
~[tapestry-core-5.3.7.jar:na]
at $HttpServletRequestHandler_664af085b2d8.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
~[tapestry-core-5.3.7.jar:na]
at $HttpServletRequestFilter_664af085b2d2.service(Unknown Source) ~[na:na]
at $HttpServletRequestHandler_664af085b2d8.service(Unknown Source) ~[na:na]
at
org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:852)
~[tapestry-core-5.3.7.jar:na]
at $HttpServletRequestHandler_664af085b2d8.service(Unknown Source) ~[na:na]
at $HttpServletRequestHandler_664af085b2d1.service(Unknown Source) ~[na:na]
at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:171)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
~[catalina.jar:7.0.12]
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
~[catalina.jar:7.0.12]
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
~[catalina.jar:7.0.12]
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
~[catalina.jar:7.0.12]
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
~[catalina.jar:7.0.12]
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
~[catalina.jar:7.0.12]
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
~[catalina.jar:7.0.12]
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
~[catalina.jar:7.0.12]
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
~[catalina.jar:7.0.12]
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
~[catalina.jar:7.0.12]
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
~[tomcat-coyote.jar:7.0.12]
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
~[tomcat-coyote.jar:7.0.12]
at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
~[tomcat-coyote.jar:7.0.12]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
~[na:1.7.0_25]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
~[na:1.7.0_25]
at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]
Caused by: org.apache.tapestry5.runtime.ComponentEventException: Failure
writing parameter 'value' of component TestList:textToCheck: Property
'currentText' (within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1141)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$3100(ComponentPageElementImpl.java:61)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1062)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1059)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
~[tapestry-ioc-5.3.7.jar:na]
... 66 common frames omitted
Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
Failure writing parameter 'value' of component TestList:textToCheck:
Property 'currentText' (within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:689)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Form.advised$onAction_664af085b35b(Form.java:539)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Form$Invocation_onAction_664af085b35a.proceedToAdvisedMethod(Unknown
Source) ~[na:na]
at
org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:84)
~[plastic-5.3.7.jar:na]
at
org.apache.tapestry5.ioc.internal.services.LoggingAdvice.advise(LoggingAdvice.java:37)
~[tapestry-ioc-5.3.7.jar:na]
at
org.apache.tapestry5.internal.plastic.AbstractMethodInvocation.proceed(AbstractMethodInvocation.java:86)
~[plastic-5.3.7.jar:na]
at org.apache.tapestry5.corelib.components.Form.onAction(Form.java)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Form.dispatchComponentEvent(Form.java)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:940)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1117)
~[tapestry-core-5.3.7.jar:na]
... 70 common frames omitted
Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
Failure writing parameter 'value' of component TestList:textToCheck:
Property 'currentText' (within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.internal.transform.ParameterWorker$3$1.writeToBinding(ParameterWorker.java:301)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.transform.ParameterWorker$3$1.set(ParameterWorker.java:245)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Checkbox.conduit_set_value(Checkbox.java)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Checkbox.processSubmission(Checkbox.java:88)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.base.AbstractField.processSubmission(AbstractField.java:193)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.base.AbstractField.access$100(AbstractField.java:37)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:95)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:89)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:678)
~[tapestry-core-5.3.7.jar:na]
... 79 common frames omitted
Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
Property 'currentText' (within property expression 'currentText.ticked',
of net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.internal.bindings.PropBinding.set(PropBinding.java:76)
~[tapestry-core-5.3.7.jar:na]
at
org.apache.tapestry5.internal.transform.ParameterWorker$3$1.writeToBinding(ParameterWorker.java:298)
~[tapestry-core-5.3.7.jar:na]
... 87 common frames omitted
Caused by: java.lang.NullPointerException: Property 'currentText' (within
property expression 'currentText.ticked', of
net.adrien.test.TestList@41b7c08e) is null.
at
org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.nullTerm(PropertyConduitSourceImpl.java:1537)
~[tapestry-core-5.3.7.jar:na]
at $InternalPropertyConduit_664af085b38b.navigate(Unknown Source) ~[na:na]
at $InternalPropertyConduit_664af085b38b.set(Unknown Source) ~[na:na]
at
org.apache.tapestry5.internal.bindings.PropBinding.set(PropBinding.java:72)
~[tapestry-core-5.3.7.jar:na]
... 88 common frames omitted


Thank you for your time and your help.

Regards,

Adrien

Reply via email to