So to finish this thread, the workaround is to create your own
component, copy the entire Select component source, and make one change:
void beginRender(MarkupWriter writer) {
writer.element("select", "name", getControlName(), "id",
getClientId());
_validate.render(writer);
_resources.renderInformalParameters(writer);
}
That _validate.render(writer) is new. Is this the recommended way for
"extending" components, which I know we're not supposed to (and
can't) do?
In any case, I feel this behaviour should at least be allowed by the
Select component, if not made the default, without having to resort
to this solution.
I've filed a JIRA:
https://issues.apache.org/jira/browse/TAPESTRY-2295
J
On 24-Mar-08, at 3:32 PM, Julian Wood wrote:
The situation is this:
I have a select box in a form, and I want to make it required.
This is simple enough, but the blank option disappears when the
required validation is applied, client-side validation is not
performed, and is indeed not needed, because there are no blank
values. As a corollary, the first option is always selected by
default upon entry into the form.
The problem with this is that users have a tendency to skip these
fields which are prepopulated, something which when having a blank
option does not happen, so this is not the behaviour that I want.
So to change this, I added t:blankoption="always" to the select
field, to restore the blank option. But now, I am bitten by the
previous conclusion that client-side validation is not performed on
these fields (in fact there is no client-side validation at all,
ever - the paradigm explained here is used to cover the required
case). So when combined with other fields which do have client-side
validation, this looks quite disjointed.
So I'm trying to figure out the best way to accomplish what I want,
which is a select box with a blank option, which has a client-side
required validation inline with the other client-side required
validations.
All that is required is the contribution to the Tapestry.validate
(...) javascript code snippet by the select field, to get it to
behave as wanted, but I can't figure out the proper mechanism for
accomplishing this. I'm sure it's something very simple, somewhere,
but what?
I can see how it is added -
org.apache.tapestry.internal.services.ClientBehaviorSupportImpl#addVal
idation, coming from org.apache.tapestry.validator.Required#render
but why is render called for a TextField with the 'required'
validator, but not from a Select field?
Anyway, I'm still digging, but maybe someone has a hint. Thanks,
J
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]