We had a requirement to put an image after each label for form fields that were required.
I am new to tapestry but after some investigation and by following Howard's pattern I was able to do this. Firstly I decorated the DefaultValidationDecorator class and added the image inside the label. I tired passing in the markupWriter to the class and using it to construct the markup but I couldnt get that to work. Instead I used the direct access to the element to add the sub element. public class RequiredFieldValidationDecorator implements ValidationDecorator { private ValidationDecorator decorator; private final Asset iconAsset; private final Messages validationMessages; public RequiredFieldValidationDecorator(ValidationDecorator decorator, Messages validationMessages, Asset iconAsset) { this.decorator = decorator; this.validationMessages = validationMessages; this.iconAsset = iconAsset; } public void insideField(Field field) { decorator.insideField(field); } public void beforeLabel(Field field) { decorator.beforeLabel(field); } public void insideLabel(Field field, Element element) { decorator.insideLabel(field, element); if (field.isRequired()) { String iconId = field.getClientId() + ":required_field_icon"; element.raw(" <em>"); element.element("img", "src", iconAsset.toClientURL(), "alt", validationMessages.get("REQUIRED_FIELD_IMG_ALT"), "id", iconId); element.raw("</em>"); } } public void afterLabel(Field field) { decorator.afterLabel(field); } public void beforeField(Field field) { decorator.beforeField(field); } public void afterField(Field field) { decorator.afterField(field); } } Then i changed my default layout to add this new RequiredFieldValidationDecorator to the environment. Now anytime a field is marked as required (ie t:validate="required" in your tml) the required star is rendered after the label. @Inject private Environment environment; @Inject @Path("context:/images/required_star.gif") private Asset requiredFieldStar; @BeginRender public void beginRender() { ValidationDecorator decorator = environment.peek(ValidationDecorator.class); environment.push(ValidationDecorator.class, new RequiredFieldValidationDecorator(decorator, messages, requiredFieldStar)); } @AfterRender public void afterRender() { environment.pop(ValidationDecorator.class); } Hope this might help someone. _devilabit_ Howard Lewis Ship wrote: > > You can create your own implementation of the interface, or subclass > Tapestry's and extend it. > > The trick is to get Tapestry to *use* it. > > If you look at the various form components, they have the following: > > @Environmental > private ValidationDecorator _decorator; > > That means "pick up the decorator from the environment". What's the > environment? > > It's a service, Environment, that is scoped to the request, that holds > these things. > > Before the Form renders, your decorator must be added to the environment: > > Perhaps you would do this from your application-specific Layout component: > > @Inject > private Environment _environment; > > public void beginRender() > { > _environment.push(ValidationDelegate.class, new MyValidationDelegate()); > } > > public void afterRender() > { > _environment.pop(ValidationDelegate.class); > } > > > This Layout component (T4 used the term "Border" for this pattern) > wraps around all the content of your page. It generally provides some > navigation for the page, as well as CSS & etc . for look and feel; > here is is also providing the ValidatonDelegate used inside your page. > > On 7/10/07, Foror <[EMAIL PROTECTED]> wrote: >> Hi! How to create my ValidationDecorator in T5, with marked required >> fields when Form is first loaded on page? >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > -- > Howard M. Lewis Ship > TWD Consulting, Inc. > Independent J2EE / Open-Source Java Consultant > Creator and PMC Chair, Apache Tapestry > Creator, Apache HiveMind > > Professional Tapestry training, mentoring, support > and project work. http://howardlewisship.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/How-to-create-my-ValidationDecorator-in-T5--tp11533833p18713492.html Sent from the Tapestry - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]