List Info

Thread: Custom postback data handler for widgets




Custom postback data handler for widgets
user name
2006-04-23 19:38:58
Archetypes has hardcoded postback data saving for widgets in

session_save_form.py. This is very no no, since custom
widgets cannot 
handle their postback data themselves. KeywordWidgets is
hardcoded to 
session_save_form.py.

Please, could someone check this patch and commit it to AT
SVN. Unit tests 
are included (test_postback.py).

I added ticket + diff fix to AT Trac: 
http://dev
.plone.org/archetypes/ticket/654

* Adds savePostbackData method to Widgets

* Modifies TypesWidget? to handle general postback

* Modifies KeyWordWidget? to handle its custom types

* Unit tests for former

---

Current implementation
(Archetypes/skins/session_save_form.py:

REQUEST = context.REQUEST

# hey, don't forget to increment object number for sessions
form_data = {'HTTP_REFERER':REQUEST.get('last_referer',
None)}
to_store = [f for f in context.Schema().values() if f.type
!= 'computed']

for field in to_store:
     fieldname = field.getName()
     if field.widget.getName() == 'KeywordWidget':
         fieldname = '%s_keywords' % field.getName()
         data = []
         if REQUEST.has_key(fieldname):
             data += REQUEST.get(fieldname)
         fieldname = '%s_existing_keywords' %
field.getName()
         if REQUEST.has_key(fieldname):
             data += REQUEST.get(fieldname)
         form_data[field.getName()] = data
     else:
         if REQUEST.has_key(fieldname):
             form_data[fieldname] = REQUEST.get(fieldname)

# XXX Implicitly creating a session for user.
REQUEST.SESSION.set(context.getId(), form_data)

---

Suggested implemenation (see diff for more details):

REQUEST = context.REQUEST

# hey, don't forget to increment object number for sessions
form_data = {'HTTP_REFERER':REQUEST.get('last_referer',
None)}
to_store = [f for f in context.Schema().values() if f.type
!= 'computed']

for field in to_store:
     # Use widget postback handler to carry data
     field.widget.savePostbackData(REQUEST, context, field,
form_data)

# XXX Implicitly creating a session for user.
REQUEST.SESSION.set(context.getId(), form_data)




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web
services, security?
Get stuff done quickly with pre-integrated technology to
make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on
Apache Geronimo
http://sel.as-us.falkag.net/
sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Archetypes-devel mailing list
Archetypes-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/archet
ypes-devel
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )