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]

Reply via email to