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]