Yes, I'd still use the same technique.

If you don't need to use ajax, then just do a normal submit and render a new page doing all the processing on the server side.

If you do want to use ajax though, it's not much effort for the javascript callback to include a for loop that updates multiple fields and/or inserts new fields into the page. My action would return a JSON structure (using JSON Result) rather than an HTML result to make this easier. eg. it could return a Map/Bean specifying field name and the new value.

I don't know exactly what you're doing, but here's a description of my approach in more detail.

Create an action that uses the JSON Result. Set it up to include a property that is a Map of FieldName:value. The execute method populates the map. The JSON result serializes the Map into something like this "{ myMap : { "field1" : "a", "field2" : "b" } }".

In javascript:
add a listener to the text field(s) of interest. The listener performs an XmlHttpRequest with the value(s) of the form. It posts to your action. The callback for the request is a javascript function. If it succeeds it's passed the JSON result that can be evaluated into a javascript object.
   var myMap = eval(jsonBody);
 You can then use the content of the map update text fields.
   eg. getElementById(fieldId).value=myMap['fieldId'];

The details depend on which ajax library you use, but the last part, the for loop to update multiple fields, it plain old javascript..

Late last year I threw together a simple webapp for previewing freemarker that basically uses this technique. (http://www.freemarkertool.com - please excuse the *slow* virtual server). A listener on the main text area posts to the action if there hasn't been a keypress for 2 seconds. The callback renders the result in the Result text area. If you look at the responses with FireBug you'll see the result is a simple JSON structure with some flags and text fields. Similarly, on the right is a table containing text fields that triggers the same process, as too does selecting an example from the drop-down box in the top left.

Hope that helps.

regards,
Jeromy Evans

Prashant Khanal wrote:
Do you mean to catch the response from server using javascript and update
the textfields using javascript?

The solution seems to be appropriate under circumstances when we have few
fixed number of textfields. How about the condition when those text fields
are the part of the row of a table and we need to distribute the value given
in the master textfield to the textfields of rows and the figure changed is
any of these textfields have to trigger the distributing functionality
Do you still suggest to use the same technique for that or did i
misunderstood your technique?




On 2/25/08, Jeromy Evans <[EMAIL PROTECTED]> wrote:
Dibesh Shakya wrote:
Hello all,
I have 3 text fields say A, B and C out of which A is a master text
field
whose value is distributed between remaining text fields.
My requirement is if i give value say 20 to field say A then an action
is
called which will distribute the values between other text fields. How
can i
implement this using Ajax?
I searched for this through entire forum but could not find any help for
my
problem.



Attach a listener to text field A using javascript.  On the event (eg.
keypress) make a request using your favourite ajax library.  Update the
other text fields in your asynchronous callback using the content/data
received from your action.

Any ajax library will easily allow you add a listener, call an action,
and process the asynchronous result.  The catch is you have to use the
library directly, not Struts.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




------------------------------------------------------------------------

No virus found in this incoming message.
Checked by AVG Free Edition. Version: 7.5.516 / Virus Database: 269.21.0/1296 - Release Date: 24/02/2008 12:19 PM

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to