Hi all, Does anyone have an example of a variable translate in a TextField? I want to switch between translators for different currencies because they have different numbers of decimal places.
<t:textfield t:id="price1" value="paymentAgreement.price1" t:mixins="touchspin" touchspin.max="999.99" touchspin.forceStepDivisibility="'none'" touchspin.decimals="prop:currencyDecimalPlaces" translate="prop:moneyAmountTranslator”/> Unfortunately I get error: org.apache.tapestry5.ioc.util.UnknownValueException: Could not find a coercion from type com.goxpro.xpro.web.translators.MoneyAmountTranslator to type org.apache.tapestry5.FieldTranslator. The background is that class MoneyAmountTranslator implements Translator<BigDecimal>. It’s contributed to TranslatorAlternatesSource in AppModule: @SuppressWarnings("rawtypes") public static void contributeTranslatorAlternatesSource(MappedConfiguration<String, Translator> configuration, ThreadLocale threadLocale) { ... configuration.add("moneyamount_0", new MoneyAmountTranslator("moneyamount_0", 0, threadLocale, false)); configuration.add("moneyamount_2", new MoneyAmountTranslator("moneyamount_2", 2, threadLocale, false)); configuration.add("moneyamount_3", new MoneyAmountTranslator("moneyamount_3", 3, threadLocale, false)); } In the page/component’s Java, I choose the translator... @Property private Translator moneyAmountTranslator; ... Map<String, Translator> translatorAlternates = translatorAlternatesSource.getTranslatorAlternates(); switch (currencyDecimalPlaces) { case 0: moneyAmountTranslator = (MoneyAmountTranslator) translatorAlternates.get("moneyamount_0"); break; case 2: moneyAmountTranslator = (MoneyAmountTranslator) translatorAlternates.get("moneyamount_2"); break; case 3: moneyAmountTranslator = (MoneyAmountTranslator) translatorAlternates.get("moneyamount_3"); break; default: throw new IllegalStateException(paymentAgreement.toString()); } But I am having difficulty wrapping it in a FieldTranslator. Strangely, this works… <t:textfield t:id="price1" value="paymentAgreement.price1" t:mixins="touchspin" touchspin.max="999.99" touchspin.forceStepDivisibility="'none'" touchspin.decimals="prop:currencyDecimalPlaces" translate=“moneyamount_0”/> But this doesn't… @Property private String moneyAmountTranslatorStr; … moneyAmountTranslatorStr = “moneyamount_0”; <t:textfield t:id="price1" value="paymentAgreement.price1" t:mixins="touchspin" touchspin.max="999.99" touchspin.forceStepDivisibility="'none'" touchspin.decimals="prop:currencyDecimalPlaces" translate="prop:moneyAmountTranslatorStr”/> Cheers, Geoff