Thank you Thiago. I had no idea that I could use @InjectComponent into a 
Component, and I had no idea that use @InjectComponent of the same element into 
both a TextField and a Component without conflict, so thank you for the 
suggestion. It worked! Do you know if either is mentioned in the T5 doco?

@InjectComponent(‘price1”)
private TextField price1Field;

@InjectComponent(‘price1”)
private Component price1Component;

Cheers,

Geoff

> On 4 Nov 2021, at 4:32 am, Thiago H. de Paula Figueiredo <thiag...@gmail.com> 
> wrote:
> 
> On Tue, Nov 2, 2021 at 12:55 AM JumpStart <
> geoff.callender.jumpst...@gmail.com 
> <mailto:geoff.callender.jumpst...@gmail.com>> wrote:
> 
>> Hi all,
>> 
> 
> Hello!
> 
> I'd try using one of the methods of FieldTranslatorSource, starting
> with createTranslator(ComponentResources componentResources, String
> translatorName);. It's exactly the one used by the "translate" binding. The
> ComponentResources should be the one of the field (i.e. you'll need
> to @InjectComponent private Component price1; and pass
> price1.getComponentResources() to FieldTranslatorSource.createTranslator().
> 
> 
>> 
>> 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
>> 
>> 
>> 
>> 
>> 
> 
> -- 
> Thiago

Reply via email to