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]