Nice one - thanks for that! ;)
Perhaps that's something for the Wiki...
Andreas
On 14. Jun 2006 - 17:18:28, Bryan Lewis wrote:
| Here's what's been working well for us. Our custom ValidationDelegate
| extends Tapestry's ValidationDelegate and overrides the
| writeAttributes() method, which is documented as "Does nothing. Override
| in a subclass to decorate fields." We emit a
| class="required-field" attribute. It's up to the app's stylesheet to
| define the appearance.
|
| public void writeAttributes(IMarkupWriter writer,
| IRequestCycle cycle,
| IFormComponent component,
| IValidator validator)
| {
| if (isInError()) {
| writer.attribute("class", "error");
| }
| else if (isRequired(component)) {
| writer.attribute("class", "required-field");
| }
| }
|
| /** Returns true if the component has a Required validator. */
| public boolean isRequired(IFormComponent component)
| {
| boolean retval = false;
|
| if (component instanceof ValidatableField) {
| Object validators = ((ValidatableField)
| component).getValidators();
| if (validators != null
| // The docs say getValidators() is "coerced into an Iterator
| // of Validators", but I get a Collection. Allow for
| either.
| Iterator it = null;
| if (validators instanceof Iterator) {
| it = (Iterator) validators;
| }
| else if (validators instanceof Collection) {
| it = ((Collection) validators).iterator();
| }
| assert it != null;
|
| while (it.hasNext()) {
| Validator validator = (Validator) it.next();
| if (validator.isRequired()) {
| retval = true;
| break;
| }
| }
| }
| }
| return retval;
| }
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]