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 
<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 
<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


Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to