Hi,

I've put together a small demo of a grid like html component which makes
use of a JSON string in a hidden input field (tapestry component) to
convey state between the client and server.

http://cruise.sadalbari.com:8080/tapestry-prototypes/GridDemo.html

Basically each entry in the grid is an ActionEntry (a javascript class
which has its java counterpart on the server side).
ActionEntries contain 3 fields
1) A unique id (this is a client assigned unique id)
2) An action (either ADD, UPDATE, DELETE or NONE)
3) An embedded object - which in this case is a GridEntry object with a
code and amount

Editing of the html entries fires javascript events which update the
object model (in the client).  When the user clicks "Save", the object
model - an array of action entries is converted to a JSON String and
submitted (using a tapestry form) to the server.

On the server side, I manually convert the JSON string to an object
graph and then apply the necc. changes (ADDING, UPDATING, DELETING etc)

One big drawback is that because the component is dynamic HTML, I can't
apply validation (and translation) using the normal tapestry mechanisms.
 I've hacked around this by including a hidden div containing an
@TextField component which contains the same attributes (translators,
validators) that I wish to apply to each of the amount input fields.

<div style="display:none">
  <input jwcid="[EMAIL PROTECTED]" disabled="true" value="ognl:amount"
id="amount" validators="validators:required"
translator="translator:number" displayName="amount" />
</div>

So then on the server side (and this is where it gets ugly) I use this
component to do translation and validation, catching the validation
errors and populating a validation delegate.

TextField comp = (TextField)component;
Object object = comp.getTranslatedFieldSupport().parse(comp, jsonValue
== JSONObject.NULL ? null : jsonValue.toString());
comp.getValidatableFieldSupport().validate(comp, null, cycle, object);

I'm a newbie to tapestry and JSON - but am willing to share this
contribution to anyone that may find it useful.  I'd also like to
improve on the validation - so if anyone has any suggestions on how do
this in a more elegant manner let me know.

Thanks

-- 
Justin Walsh
http://www.ewage.co.za

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

Reply via email to