kranga wrote:

I'm interested in the answer to this too - can someone shed light on this?

----- Original Message ----- From: "Scott F. Walter" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, July 01, 2005 3:51 PM
Subject: Tapestry 4 Validation Question


So the format for the new validator syntax is :

validator:/name/[,/property/[=/value/]]*

My questions are:
1.  If I create my own custom validator what do I specify for "name", is
it the full qualified class path or do I need to some how register "name"
with a full qualified class path?
2.  Using the format above, how can I have multiple validators?

thanks, scott.


--

Scott F. Walter Scott F. Walter
Principal Consultant
Vivare, Inc.

E: [EMAIL PROTECTED]
E: [EMAIL PROTECTED]
Visit scottwalter.com <http://scottwalter.com> --Point.  Click.  Explore!




---------------------------------------------------------------------
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]


I figured it out! To create and user a custom validator, follow these steps:

1. Create a class that extends org.apache.tapestry.form.validator.BaseValidator 2. If you want parameters to be passed into your validator, create a constructor that takes a String
3.  Override the validate method()
4. Provide a contribution to tapestry.form.validator.Validators in hivemodule.xml (stored in your WEB-INF directory)

Below are my custom validator and my hivemodule.xml file

import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.form.ValidationMessages;
import org.apache.tapestry.form.validator.BaseValidator;
import org.apache.tapestry.valid.ValidatorException;

/**
*
* @author scott
*/
public class MyNameValidator extends BaseValidator {
/** Creates a new instance of MyNameValidator */
   public MyNameValidator() {
   }
public void validate(IFormComponent field,
             ValidationMessages messages,
             java.lang.Object object)
             throws ValidatorException {
if(object!=null && !object.toString().equalsIgnoreCase("scott")) { throw new ValidatorException(messages.formatValidationMessage(null, "invalid-format", null)); } } }

<?xml version="1.0"?>

<module id="tapestry4sandbox" version="1.0.0" package="com.scottwalter.sandbox.tapestry4"> <contribution configuration-id="tapestry.form.validator.Validators"> <validator name="myname" configurable="false" class="com.scottwalter.sandbox.tapestry4.MyNameValidator"/>
   </contribution>
</module>

Then inside my specification file, I have a component like the one below: (Notice "myname" maps into the hivemodule,xml)

 <component id="firstNameField" type="TextField">
   <binding name="value" value="ognl:person.firstName"/>
   <binding name="validators" value="required,minLength=3,myname"/>
   <binding name="displayName" value="First Name"/>
 </component>


The only problem I am having is to have localized error messages returned. I have defined a global message space file, and I have a key in the properties file, but when I try to reference in my custom validator like this:

formatValidationMessage(null, "namenotscott", null) I get this exception at runtime:

java.util.MissingResourceException Can't find resource for bundle java.util.PropertyResourceBundle, key namenotscsott

For the "messageKey" parameter, I can only get values from ValidationStrings.properties (which is located in the tapestry jar file).

So my question is when formatting validation messages how do I specify the location of the resource bundle to use????


--

Scott F. Walter         Scott F. Walter
Principal Consultant
Vivare, Inc.

E: [EMAIL PROTECTED]
E: [EMAIL PROTECTED]
Visit scottwalter.com <http://scottwalter.com> --Point.  Click.  Explore!




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to