Re: [Perl-widget-developer] XSP PerForm taglib (fwd)
Status: Alpha
Brought to you by:
spadkins
From: Gunther B. <gu...@ex...> - 2001-06-11 10:02:52
|
My initial reaction is that I think this is much more complex than a widget library that produces HTML and it's even less clear to me that XML is a good delivery mechanism for abstracting forms. I truly believe that when you make an app into an HTML app vs a WML app vs anything else that the screens are significantly different. I think that this XML stuff may be fine for content sites like newspapers, but for an app it seems like it's a lot of work for much less gain than you get on the pure content management side. Later, Gunther At 10:49 PM 6/8/2001 +0100, Matt Sergeant wrote: >Thought this might interest some of you widget geeks :-) > >-- ><Matt/> > > /|| ** Founder and CTO ** ** http://axkit.com/ ** > //|| ** AxKit.com Ltd ** ** XML Application Serving ** > // || ** http://axkit.org ** ** XSLT, XPathScript, XSP ** > // \\| // ** mod_perl news and resources: http://take23.org ** > \\// > //\\ > // \\ > >---------- Forwarded message ---------- >Date: Fri, 8 Jun 2001 22:40:56 +0100 (BST) >From: Matt Sergeant <ma...@se...> >To: AxKit Users Mailing List <axk...@ax...> >Subject: XSP PerForm taglib > >Taking a bunch of ideas from a number of places I've started putting >together what I call the "PerForm" taglib. This is sort of a magic form >tag library that will enable you to write web forms sucking data from >various sources more easily. > >I'm looking for some sort of feedback on this, though it's pretty funky as >it stands IMHO. > >Best way to describe it is with an example (this assumes passing >familiarity with XSP): > >=============== > ><?xml version="1.0"?> ><xsp:page > xmlns:xsp="http://apache.org/xsp/core/v1" > xmlns:web="http://axkit.org/NS/xsp/webutils/v1" > xmlns:f="http://axkit.org/NS/xsp/perform/v1" > language="perl" > indent-result="yes" > > ><!-- TOP LEVEL LOGIC --> ><xsp:logic> > ># Each function recieves a $ctxt object, which is a hash to ># store things in. It has one entry by default, "Form", which ># is a hash of form values > >sub load_title { > my ($ctxt, $default, $current) = @_; > warn("load_title ($default, $current)\n"); > return $current || $default; >} > >sub load_link { > my ($ctxt, $default, $current) = @_; > warn("load_link ($default, $current)\n"); > return $current || $default; >} > >sub save_title { > my ($ctxt, $new_value) = @_; > warn("save_title : $new_value\n"); >} > >sub save_link { > my ($ctxt, $new_value) = @_; > warn("save_link : $new_value\n"); >} > >sub start_form_create { > my ($ctxt, $save_mode) = @_; > warn("start_form\n"); >} > >sub end_form_create { > my ($ctxt, $save_mode) = @_; > warn("end_form\n"); > # if everything is OK, and we're in save_mode, redirect. > if ($save_mode) { > if ($ctxt->{OK}) { > # note mixing taglibs and Perl!!! > <web:redirect uri="everything_ok.xsp"/> > } > } >} > ></xsp:logic> > >Title: >Link: ></xsp:page> > >=============== > >OK, hopefully that hasn't confused anyone too much. Now the idea is that >these forms always get submitted back to themselves. They do their own >validation. If everything went well and the form got saved OK, they issue >a redirect to another page. It's kinda like the MVC model, only slightly >spiced the AxKit way :-) > >Now when the form is first loaded, the input fields are populated by a >callback to the load_<name>() function, where <name> is the name entry of >the particular form field. So to populate the first textfield, it calls >load_title(...). It passes in parameters $ctxt, $default, and $current. >Note that $current will only be filled if this form has already been >submitted once (filled with the current value, obviously). The value you >return is what goes in the text box that the user sees. > >When the form is submitted, the save_<name>() functions are called. This >time they are passed the $ctxt and the new value. There you can do >validation or whatever you like (save to a DB, etc). > >Each view of the form is started by a call to start_form_<name>(), where ><name> this time is the name attribute on the form. When all the form's >callbacks have been performed, the end_form_<name>() callback is called. > >The $ctxt object is a simple hashref that you can fill with whatever you >like. It's there to help you maintain state between the callbacks. It >contains one entry by default, "Form", which is a hashref to all the other >form values. This allows you to do validation where one value depends on >another. > >If you *don't* want to supply callbacks for load_*, then it defaults to >using either the current value (i.e. the value last posted to the form), >or the default value specified if this is the first load of this form. > >Now when all this has been done, it doesn't generate a HTML widget. It >just generates some XML decorated with all the relevant attributes. You >need to write an XSLT stylesheet (which I'll include with the package for >HTML) to render it to HTML. But it's really simple to do that with >xsl:include/xsl:import. I may even be persuaded to do an XPathScript >stylesheet for it :-) > >I welcome your feedback on this. I think it will make building complex >forms really easy. One nice thing with XML is we can put all that nasty >callbacks code in another file, and use entities to load it in. Or we can >use "use OtherPackage qw(...)" to import the functions to the current >namespace. Either way will work. > >I can put this in CVS if people want to play with it as it stands. But I >have only implemented the textfield widget as yet. > >-- ><Matt/> > > /|| ** Founder and CTO ** ** http://axkit.com/ ** > //|| ** AxKit.com Ltd ** ** XML Application Serving ** > // || ** http://axkit.org ** ** XSLT, XPathScript, XSP ** > // \\| // ** mod_perl news and resources: http://take23.org ** > \\// > //\\ > // \\ > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: axk...@ax... >For additional commands, e-mail: axk...@ax... > > > >_______________________________________________ >Perl-widget-developer mailing list >Per...@li... >http://lists.sourceforge.net/lists/listinfo/perl-widget-developer __________________________________________________ Gunther Birznieks (gun...@eX...) eXtropia - The Open Web Technology Company http://www.eXtropia.com/ |