There's (for the moment) two configurations that control translators. Here's the built-in contributions, provided by TapestryModule:
/** * Contributes the basic set of default translators: * <ul> * <li>Integer</li> * <li>String</li> * <li>Long</li> * <li>Double</li> * </li> */ public static void contributeTranslatorDefaultSource( MappedConfiguration<Class, Translator> configuration) { configuration.add(Integer.class, new IntegerTranslator()); configuration.add(String.class, new StringTranslator()); configuration.add(Long.class, new LongTranslator()); configuration.add(Double.class, new DoubleTranslator()); } /** * Contributes the basic set of named translators: * <ul> * <li>integer</li> * <li>string</li> * <li>long</li> * <li>double</li> * </ul> */ public static void contributeTranslatorSource( MappedConfiguration<String, Translator> configuration) { // Fortunately, the translators are tiny, so we don't have to worry about the slight // duplication between this and TranslatorDefaultSource, though it is a pain to keep the two // organized (perhaps they should be joined together into a single service, where we // identify a name and a match type). configuration.add("integer", new IntegerTranslator()); configuration.add("string", new StringTranslator()); configuration.add("long", new LongTranslator()); configuration.add("double", new DoubleTranslator()); } The TranslatorDefaultSource is responsible for providing a translator based on the property type. The TranslatorSource is used (with the translator: binding prefix) to select a translator by name. The repetition is annoying and the two services may be merged together at some point. I don't think a UUID translator would be very complicated: there's a static fromString() method. It does make sense that there should be a default translator that leverages the TypeCoercer to perform translations to and from strings. Perhaps TranslatorDefaultSource is simply not needed -- scratch that: the translators are needed to generate client-side validation JavaScript (but a default translator would be useful, even if it could not handle client-side validation). On 5/22/07, Fisher, Brice A <[EMAIL PROTECTED]> wrote:
I have a bean that returns an Id as a java.util.UUID. Tapestry 5 can't translate this into anything it can display, so I get a: --- java.lang.IllegalArgumentException No adapter from type java.util.UUID to type org.apache.tapestry.Translator is available (registered types are java.lang.Double, java.lang.Integer, java.lang.Long, java.lang.String). --- So, I added a Type Coercion to my AppModule to coerce UUID's to Strings, but that's not sufficient. Do I need to coerce UUIDs to a Translator (and if so, how, as it's not clear how a StringTranslator would be constructed)? Or is there some other interface to register a type with the Translator? Thanks, - Brice
-- 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