If you init your model in setupRender it will be null upon form submit (as
it is not a render request) - You can use onActivate, onPrepareForSubmit or
onPrepare to init the model prior to form submission.

-- 
Chris

On Mon, Nov 17, 2014 at 12:39 PM, D Tim Cummings <t...@triptera.com.au>
wrote:

> I am trying to understand the new attribute "secure" of the "select"
> component. This is either a bug or I don’t understand the attribute. I am
> running Tapestry 5.4 beta 22.
>
> I have copied the code from the Jumpstart7 AJAX filtered grid example
> where firstInitials is a List<String> created in the setupRender() method.
>
>
> http://jumpstart.doublenegative.com.au/jumpstart7/examples/ajax/filteredgrid
>
> The example uses secure="never" and works. However if I use secure="auto"
> as in
>
> <t:select t:id="firstInitial" model="firstInitials" onchange=
> "document.getElementById('filterSubmit').click()" secure="auto" />
>
> then I get the error message
> org.apache.tapestry5.ioc.internal.util.TapestryException
>
> *Parameter 'model' of component Contact:firstinitial is bound to null.
> This parameter is not allowed to be null.*
> with stack trace
>
> Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> Parameter 'model' of component Contact:firstinitial is bound to null. This
> parameter is not allowed to be null. [at
> classpath:au/com/createng/job/pages/Contact.tml, line 8]
> 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.components.Select.conduit_get_model(Select.java)
> at org.apache.tapestry5.corelib.components.Select.toValue(Select.java:292)
> at
> org.apache.tapestry5.corelib.components.Select.processSubmission(Select.java:200)
> at
> org.apache.tapestry5.corelib.base.AbstractField.processSubmission(AbstractField.java:260)
> at
> org.apache.tapestry5.corelib.base.AbstractField.access$100(AbstractField.java:41)
> at
> org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:103)
> at
> org.apache.tapestry5.corelib.base.AbstractField$ProcessSubmission.execute(AbstractField.java:97)
> at
> org.apache.tapestry5.corelib.components.Form.executeStoredActions(Form.java:739)
> ... 100 more
>
>
> This is a really bad error message because it took me ages to realise it
> was because of the change I had made to the secure attribute (which I had
> removed thinking that it was something to do with https).   I get the same
> exception if I leave the attribute out completely. Yet looking at the
> source code for Select.java, the default should be select="auto" and allow
> the model to be null.
>
>     /**
>      * Controls whether the submitted value is validated to be one of the
> values in
>      * the {@link SelectModel}. If "never", then no such validation is
> performed,
>      * theoretically allowing a selection to be made that was not
> presented to
>      * the user.  Note that an "always" value here requires the
> SelectModel to
>      * still exist (or be created again) when the form is submitted,
> whereas a
>      * "never" value does not.  Defaults to "auto", which causes the
> validation
>      * to occur only if the SelectModel is present (not null) when the
> form is
>      * submitted.
>      *
>      * @since 5.4
>      */
>     @Parameter(value = BindingConstants.SYMBOL + ":" +
> ComponentParameterConstants.VALIDATE_WITH_MODEL, defaultPrefix =
> BindingConstants.LITERAL)
>     private SecureOption secure;
>
> This appears to be related to the bug
>
> https://issues.apache.org/jira/browse/TAP5-2204 Select component fails if
> SelectModel doesn't exist on submit
>
> which was resolved in November last year.
>
> Regards
>
> Tim
>
>
>

Reply via email to