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]