I have implemented a simple Translator for dates, but I am at a loss trying to understand why I get a RenderQueueException "Parameter 'translate' of component XXX is bound to null. This parameter is not allowed to be null" while actually the TextField component mentioned in that exception certainly does not have a "translate" parameter. Another TextField in the same form does though.
I can reproduce this and here is a stripped-down example, hoping maybe someone spots what's wrong. Running this example as-is, there is no error and the text field which has the "translate" attribute does show the formatted date, as expected. Just by uncommenting in the template the other text field, which does not have any "translate" attribute, there will be the exception saying that this field has a "translate" parameter and that it is bound to null. Tapestry 5.3.7, Java 1.8.0_45, Windows 8.1 ----------------------------------------- THIS IS THE TRANSLATOR : --------------------------------------------- package test.tapestry.translators; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.tapestry5.Field; import org.apache.tapestry5.MarkupWriter; import org.apache.tapestry5.ValidationException; import org.apache.tapestry5.internal.translator.AbstractTranslator; import org.apache.tapestry5.services.FormSupport; public class DateTranslator extends AbstractTranslator<Date> { public DateTranslator(String name) { super(name, Date.class, "date-translator-exception"); } @Override public String toClient(Date value) { return new SimpleDateFormat("yyyy-MM-dd").format(value); } @Override public Date parseClient(Field field, String clientValue, String message) throws ValidationException { return new Date();// Doesn't matter, never called, there is no submit. } @Override public void render(Field field, String message, MarkupWriter writer, FormSupport formSupport) { } } ------------------------------------------------------------ ----------------------------------------- THIS IS THE TRANSLATOR CONTRIBUTION, FROM AppModule.java : --------------------------------------------- public static void contributeTranslatorAlternatesSource(MappedConfiguration<String, Translator<?>> configuration, ThreadLocale threadLocale) { configuration.add("dateTranslator", new DateTranslator("dateTranslator")); } ------------------------------------------------------------ ----------------------------------------- THIS IS THE PAGE TEMPLATE (MyTest.tml) : --------------------------------------------- <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"> <body> <form t:type="form" t:id="myForm"> <t:errors /> <div> <label>Formatted date: </label> <input t:type="TextField" t:id="myFormattedDateInputField" t:value="myFormattedDateInputFieldValue" t:translate="dateTranslator" /> </div> <!-- UNCOMMENT THIS TO GET THE EXCEPTION. <div> <label>Raw date: </label> <input t:type="TextField" t:id="myRawDateInputField" t:value="myRawDateInputFieldValue" /> </div> --> </form> </body> </html> ------------------------------------------------------------ ----------------------------------------- THIS IS THE PAGE CODE (MyTest.java) : --------------------------------------------- package test.tapestry.pages.test; import java.util.Date; public class MyTest { public Date getMyFormattedDateInputFieldValue() { return new Date(); } public Date getMyRawDateInputFieldValue() { return new Date(); } } ------------------------------------------------------------ ----------------------------------------- THIS IS THE EXCEPTION : --------------------------------------------- org.apache.tapestry5.ioc.internal.util.TapestryException: Parameter 'translate' of component test/MyTest:myrawdateinputfield is bound to null. This parameter is not allowed to be null. [at classpath:test/tapestry/pages/test/MyTest.tml, line 17] at org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:275) at org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381) at org.apache.tapestry5.corelib.base.AbstractTextField.conduit_get_translate(AbstractTextField.java) at org.apache.tapestry5.corelib.base.AbstractTextField.begin(AbstractTextField.java:159) at org.apache.tapestry5.corelib.base.AbstractTextField.beginRender(AbstractTextField.java) at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.invokeComponent(ComponentPageElementImpl.java:207) at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:148) at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.render(ComponentPageElementImpl.java:214) at org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72) at org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:124) at $PageRenderQueue_14c5fa8ebe19.render(Unknown Source) at $PageRenderQueue_14c5fa8ebe18.render(Unknown Source) at org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37) at org.got5.tapestry5.jquery.services.js.JSModule$1.renderMarkup(JSModule.java:40) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.oscy.tapestry.breadcrumbs.services.BreadCrumbsModule$2.renderMarkup(BreadCrumbsModule.java:68) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$31.renderMarkup(TapestryModule.java:1994) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$30.renderMarkup(TapestryModule.java:1978) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:1960) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:1945) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:1931) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:1913) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1894) at $MarkupRenderer_14c5fa8ebe1d.renderMarkup(Unknown Source) at $MarkupRenderer_14c5fa8ebe17.renderMarkup(Unknown Source) at org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47) at $PageMarkupRenderer_14c5fa8ebe15.renderPageMarkup(Unknown Source) at org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67) at $PageResponseRenderer_14c5fa8ebd23.renderPageResponse(Unknown Source) at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64) at org.oscy.tapestry.breadcrumbs.services.BreadCrumbsModule$1.handle(BreadCrumbsModule.java:54) at $PageRenderRequestHandler_14c5fa8ebd25.handle(Unknown Source) at org.apache.tapestry5.services.TapestryModule$38.handle(TapestryModule.java:2222) at $PageRenderRequestHandler_14c5fa8ebd25.handle(Unknown Source) at $PageRenderRequestHandler_14c5fa8ebd1b.handle(Unknown Source) .... ... ------------------------------------------------------------