Dear Wiki user, You have subscribed to a wiki page or wiki category on "Jakarta-tapestry Wiki" for change notification.
The following page has been changed by AlanChandler: http://wiki.apache.org/jakarta-tapestry/CreatingCustomTranslators New page: Creating a Translator is very similar to CreatingCustomValidators. = 1. Extend Abstract Translator = The important part is to implement the formatObject and parseText methods to convert between your object and string. In my example I have a boolean object that is the gender (aka sex) of someone represented by the 1 character strings M and F, defaulting to M when undefined. {{{ package uk.org.chandlerfamily.tapestry.translators; //TODO: Rename Sex to Gender - change hivemodule.xml and useage in Create import java.util.Locale; import org.apache.tapestry.form.IFormComponent; import org.apache.tapestry.form.ValidationMessages; import org.apache.tapestry.form.translator.AbstractTranslator; import org.apache.tapestry.valid.ValidatorException; public class Sex extends AbstractTranslator { private String _Sex; public Sex() { super(); } public Sex(String initializer) { super(initializer); } public void setSex (String sex) { _Sex = sex; } public String getSex () { return _Sex; } public String formatObject(IFormComponent arg0, Locale arg1, Object arg2) { if (arg2 == null) return "M"; return (Boolean) arg2 ? "M" : "F"; } public Object parseText(IFormComponent field, ValidationMessages messages, String text) throws ValidatorException { String [] args = new String[1]; args[0] = text; if (!text.equalsIgnoreCase("M") && !text.equalsIgnoreCase("F")) { throw new ValidatorException(messages.formatValidationMessage(null, "invalid-format", args)); } return text.equalsIgnoreCase("M"); } } }}} Note: I haven't managed to figure out how to create new message keys. The invalid-format message key is a standard tapestry one. = 2. Configure the translator in hivemodule.xml = Use the contribution element, with a bean element inside. You can put more than one bean element inside if you have multiple translators {{{ <contribution configuration-id="tapestry.form.translator.Translators"> <bean name="sex" class="uk.org.chandlerfamily.tapestry.translators.Sex" /> </contribution> }}} = 3. Use in your templates = use the translator:beanName to access the translator - with the value parameter being the translated object type. {{{ <td><span jwcid="@FieldLabel" field="component:gender" >Gender:</span></td> <td><input jwcid="[EMAIL PROTECTED]" value="ognl:sex" size="1" translator="translator:sex" displayName="Gender" /></td> }}} and in your class - see how I have used a real method in an abstract class to create a default value of true for this parameter (not sure if this is the correct way to do it) {{{ public abstract class Create extends BasePage { private boolean _sex=true; //gives a default value public boolean getSex() { return _sex; } public void setSex(boolean sex) { _sex=sex; } ... }}} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]