But not for the field where the model does not have a setter (hibernate POJO
- and no field in the database, just a formula).
Fairly obvious why that's not going to work for an update - but I can't
think of a solution on how to change the calculated value just to show it on
the form.
Steve
steve222 wrote:
>
> Ooops - my error.
>
> I need to do something like:
>
> pcntDiscount.setModel(new Model(amount.getModelObject().toString()));
>
> Then the AjaxFormComponentUpdatingBehavior works as expected.
>
>
> Steve
>
>
>
>
>
> steve222 wrote:
>>
>> Many thanks for the detailed answer.
>>
>> I don't think the single field AbsoluteOrPercentage idea will work for me
>> without a lot of other changes. I use the same form for editing a record
>> as creating a new one. So I actually need to show both the
>> AbsoluteDiscount and PercentageDiscount on the form at the same time -
>> user enters % during initial entry, he needs to see % on later edit, etc.
>> Both fields need to be editable, with the one that doesn't get edited
>> being calculated. But thanks for the idea and the detail on how to
>> implement this.
>>
>> I've been attempting to do it with separate fields for AbsoluteDiscount
>> and PercentageDiscount - but it does not work for me. My model object
>> used in the form does not have setters for the calculated field
>> PercentageDiscount - just a getter to display the calculated % value. So
>> I can't update this with AjaxFormComponentUpdatingBehavior.
>>
>> And it seems I can't update the fields using AjaxEventBehavior, eg:
>>
>> final RequireTextfield amount = new RequiredTextfield("amount",
>> Double.class);
>> amount.add(DoubleMinimumValidator.minimum(1));
>> amount.setOutputMarkupId(true);
>> container.add(amount);
>>
>> amount.add(new AjaxEventBehavior("onblur") {
>> protected void onEvent(AjaxRequestTarget target) {
>>
>> // this will always be null on new data entry, and old value
>> on edit
>> pcntDiscount.setModelObject(amount.getModelObject().toString());
>> target.addComponent(pcntDiscount);
>> }
>> });
>>
>>
>>
>> jWeekend wrote:
>>>
>>> Steve,
>>>
>>> If you prefer not to take the easy option and add a couple of radio
>>> buttons to let the user select currency or percentage input, that could
>>> also control a couple of labels (or a border) that shows, in a locale
>>> specific way, the currency symbol or the percentage sign you could ...
>>> create an AbsoluteOrPercentage class an instance of which will back the
>>> model of your DiscountAmount field. Make a validator that checks that
>>> the last character entered looks like an int or a '%' and that the other
>>> characters represent a number, and, if required, put your validation
>>> messages in the appropriate place. Add this validator to your
>>> DiscountAmount text field. Make an appropriate converter (implement
>>> IConverter - very simple logic required for both methods) and override
>>> getConverter on your text field to return it for your
>>> AbsoluteOrPercentage class. If this text field will be useful elsewhere,
>>> make a (top level) subclass of TextField - AbsoluteOrPercentageTextField
>>> for instance that does all of the above.
>>>
>>> It is not clear from your post what you want updated, but let's assume
>>> you have three fields, one for each of SalePrice, DiscountAmount and
>>> ActualAmount (price with discount applied) and you want the latter
>>> updated. Add an AjaxFormComponentUpdatingBehavior (probably "onblur") to
>>> both the input fields. In the onUpdate methods of each update the
>>> (dynamic) model object backing the ActualAmount field (probably rendered
>>> by a label since it is not meant to be edited by the user). Don't forget
>>> to add your "actualAmountTextField" component to the AjaxRequestTarget
>>> in both your onUpdate methods and also to request a markup id for
>>> actualAmountTextField - actualAmountField.setMarkupId(true) - where you
>>> build up the container. If this lot is likely to be useful elsewhere,
>>> wrap all three fields (and probably all the rest of the stuff described
>>> above) in a Panel so you can just drop it in a div anywhere you like
>>> later on.
>>>
>>> Does that do it?
>>>
>>> Regards - Cemal
>>> http://www.jWeekend.co.uk http://jWeekend.co.uk
>>>
>>>
>>>
>>>
>>> steve222 wrote:
>>>>
>>>> Hi. Hopefully I can explain this scenario OK - I'll try to keep it
>>>> simple.
>>>>
>>>> On a form, I have a couple of TextFields - SalePrice and
>>>> DiscountAmount.
>>>>
>>>> After the user enters SalePrice, I need a way to allow the user to
>>>> enter the DiscountAmount as either a flat rate or as a percentage of
>>>> the SalePrice.
>>>>
>>>> For example, if entered SalePrice is 1000, the user could enter a flat
>>>> DiscountAmount of 200.00. Or they could enter 20%. I'd like the
>>>> option to do either since SalePrice might be 8,745 and the discount
>>>> 2.75% or something (so hard to just calculat the true cash amount). Or
>>>> it might just really be a flat £200 in which case hard to calculate the
>>>> %.
>>>>
>>>> In a traditional app where I'm writing the JavaScript, I can think of
>>>> various ways to do this involving extra fields for flatrate and/or % -
>>>> then updating the real DiscountAmount field when the "dummy" fields
>>>> change.
>>>>
>>>> But I'm trying to work out an elegant way with Wicket/AJAX - without
>>>> too much success so far.
>>>>
>>>> Any suggestions - or links to similar examples? Ideally, the fewer
>>>> extra dummy fields the better.
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
--
View this message in context:
http://www.nabble.com/Wicket-AJAX-update-form-TextField-value-from-another-field-tp20117258p20121206.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]