Marc Portier <mpo <at> outerthought.org> writes:
> I do propose:
> - some refactoring of the kind
> - introduce more granular methods
> (e.g. to call parseValue() in stead of getValue() in all occasions
> where the return is ignored anyway?)
I found another reason that more granular methods are necessary:
I have a field with a selection list and a submit button. The field is optional
required based on the submit, i.e. if the submit button is pressed there must be
something selected:
<wd:field id="event">
<wd:label><i18n:text key="events"/></wd:label>
<wd:datatype base="string"/>
<wd:validation>
<wd:javascript>
if (form.submitId == 'invoke' && widget.value == null) {
// add ValidationError
return false;
}
return true;
</wd:javascript>
</wd:validation>
</wd:field>
<wd:submit id="invoke" action-command="invoke" validate="false">
<wd:label><i18n:text key="action.invoke"/></wd:label>
</wd:submit>
Problem: readFromRequest() causes validation on all widgets in their order in
the form definition. But readFromRequest() also causes the setting of
form.submitWidget. So form.submitWidget is not set yet if the above much
shortened custom validator is evaluated. I have to put the field definition
'event' to the end of the form.
More granular methods help to solve the problem: 1st run through form model
readFromRequest() -> also set form's submitWidget. 2nd run validate().
Joerg