Yes.  I agree with this wholeheartedly.  I wish we would do something
similar with the application specific code that is now in Struts. 
Plugins would not be the solution, but something akin to that.

On 4/18/05, Hubert Rabago <[EMAIL PROTECTED]> wrote:
> No problemo.  As far as the extension itself is concerned, I'd still
> be interested in it, but like I mentioned earlier, only as a plugin
> that doesn't change the base tags.  The reasons are many and they are
> mentioned in the dev thread you started.  My main concern is
> implementation lock-in.  Another message in this thread already
> illustrates that there could be several approaches to adding this
> functionality.  I wouldn't want to limit how everyone else applies the
> technology.  As Martin said, if an implementation is built into
> Struts, it should support whatever client-side library the developer
> would want to use (
> http://marc.theaimsgroup.com/?l=struts-dev&m=111284722931074&w=2 ).  A
> separate plugin wouldn't have to have that burden.
> 
> A separated plugin would result in code duplication, true, but in my
> view it's worth it.  In some aspects, the ajax-aware tags you propose
> are in a better position than the EL tags.  You only need to override
> some methods, whose implementation can be moved to a util-type class.
> EL had to add duplicate fields, getters, and setters.  Just take a
> look at the source of some of those tags, like ELCheckboxTag and
> ELRadioTag.
> 
> Hubert
> 
> On 4/18/05, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:
> > Yep, sorry about that... I had it in my drafts folder because I got called
> > away in the middle of it, and I didn't check all the replies to the
> > current thread before sending it so I didn't see your link until
> > afterwards.  My bad :)
> >
> > --
> > Frank W. Zammetti
> > Founder and Chief Software Architect
> > Omnytex Technologies
> > http://www.omnytex.com
> >
> > On Mon, April 18, 2005 10:41 am, Hubert Rabago said:
> > > Frank,
> > >
> > > You must've started typing this response a while ago.  I already sent
> > > a message on this thread linking to the dev email with your proposal.
> > >
> > > Hubert
> > >
> > > On 4/18/05, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:
> > >> On 4/6 I posted the following message to the Struts dev list... I can't
> > >> seem to find the thread in the list archives, if anyone else can I would
> > >> appreciate very much you posting the link to it...
> > >>
> > >> This was discussing my proposal for integrating AJAX functionality into
> > >> the existing Struts taglibs.  There were some legitimate dissenting
> > >> points
> > >> raised about this, and ultimately the idea was shot down.  However, I
> > >> still feel the idea has significant merit.
> > >>
> > >> The proposal wasn't posted to the user list, and maybe I should have
> > >> done
> > >> so... if there is support for this in the user community, I would be
> > >> willing to persue it further and provide it as part of the SF Struts
> > >> project.
> > >>
> > >> P.S., I've added some notes here for some things that may not be as
> > >> clear
> > >> as I would have liked, especially if you aren't terribly familiar with
> > >> the
> > >> Struts code base, so if you see minor difference between this and what
> > >> is
> > >> in the archives, that's all it is...
> > >>
> > >> --------------------
> > >>
> > >> Subject: RFC: Struts HTML Ajax-Aware Tags
> > >>
> > >> Afternoon all,
> > >>
> > >> Please reference the code at:
> > >>
> > >> http://www.omnytex.com/ajaxtags.zip
> > >>
> > >> This is a complete webapp demonstrating the proposal (it isn't complete,
> > >> it is just to get the ideas across).
> > >>
> > >> I wanted to put something out there in front of you all and get some
> > >> feedback on it before I go that extra mile and finish it out.
> > >>
> > >> This came out of some ideas I tossed at Ted a few days ago.  The basic
> > >> idea is to take the existing Struts HTML taglib and make the tags
> > >> Ajax-aware.
> > >>
> > >> In a nuthsell, take a simple button tag...
> > >>
> > >> <html:button property="button1" value="Click to do Ajax!" />
> > >>
> > >> ...now, add a new attribute to it, ajaxRef:
> > >>
> > >> <html:button property="button1" value="Click to do Ajax!"
> > >> ajaxRef="button1" />
> > >>
> > >> When the tag is rendered, each possible type of event handler (in the
> > >> BaseTagHandler class) looks something like this now:
> > >>
> > >> if (getOnclick() != null) {
> > >>     handlers.append(" onclick=\"");
> > >>     handlers.append(getOnclick());
> > >>     handlers.append("\"");
> > >> }
> > >> else {
> > >>   prepareAjax("onclick", handlers);
> > >> }
> > >>
> > >> prepareAjax() does a lookup to a new XML configuration file (well,
> > >> in-memory objects representing the XML of course!) like so:
> > >>
> > >> <AjaxConfig>
> > >>   <ajaxElement>
> > >>     <id>button1</id>
> > >>     <event>
> > >>       <type>onClick</type>
> > >>       <submitType>queryString</submitType>
> > >>       <submitItems>buttonValue=button1,textValue=text1</submitItems>
> > >>       <submitTarget>http://www.omnytex.com</submitTarget>
> > >>       <returnAction>stdInnerHTML</returnAction>
> > >>       <returnTargets>resultLayer</returnTargets>
> > >>     </event>
> > >>   </ajaxElement>
> > >> </AjaxConfig>
> > >>
> > >> If an <ajaxElement> with an <id> matching the ajaxRef attribute is
> > >> found,
> > >> and if an <event> with a <type> matching the type being added to the tag
> > >> is found, then the prepareAjax() method does its thing (note that
> > >> developer-defined event handler functions will take precedent, so no
> > >> existing code would be broken by this).  And what is "its thing" you
> > >> ask?
> > >>
> > >> Basically it will add an inline event handler to the tag, just like
> > >> always, that is capable of making an Ajax request (using the
> > >> XMLHttpRequest component).  A quick description of the XML elements
> > >> pertaining to <event> should bring this in to focus:
> > >>
> > >> type .. is of course the type of event handler.  It can be any of the
> > >> types that the BaseHandlerTag handles.
> > >>
> > >> submitType .. is the type of submission that will be made.  Two types
> > >> are
> > >> (will be) supported: queryString and XML.
> > >>
> > >> submitItems .. is a comma-separated list of form elements and the names
> > >> they should be given.  For instance, in the example above we would get a
> > >> query string in the form ?buttonValue=<1>&textValue=<2> where <1> is the
> > >> value of the button on the page and <2> is the value of the textbox on
> > >> the
> > >> page.
> > >>
> > >> submitTarget .. is the URL the request is submitted to.  This can be a
> > >> relative path or a full URL (although full URLs will of course incur the
> > >> cross-site scripting restrictions)
> > >>
> > >> returnAction .. is what will happen when the request returns.  There
> > >> will
> > >> be a number of built-in actions, all prefixed with "std' (let's get all
> > >> the disease jokes out of the way now!).  You can also name a page-level
> > >> Javascript function here to do other things.
> > >>
> > >> returnTargets .. is a comma-separated list of elements on the page that
> > >> will be affected by the action.  This will generally be required for the
> > >> standard actions, and is up to the developer if they want it if writing
> > >> their own function.
> > >>
> > >> The code you hopefully downloaded is a sample webapp, very simple.
> > >> Click
> > >> the button to retrieve the Struts web site and dump it in a span.  Note
> > >> that if you are in an environment that requires a proxy for network
> > >> access, you will need to set the httpProxy and httpPort elements in
> > >> web.xml appropriately.  It is by default set up assuming no proxy is
> > >> required.
> > >>
> > >> The example has a number of quick-and-dirty type hacks just to
> > >> demonstrate... for one, the XML config file is NOT read in, instead the
> > >> objects are just populated manually in AjaxInit (which is a Struts
> > >> plug-in
> > >> and is required to make the tags Ajax-aware).  Second, the query string
> > >> is
> > >> currently not actually built, it's just hard-coded.  Third, only the
> > >> queryString submitType is recognized.  Fourth, only the stdInnerHTML
> > >> returnAction is recognized (as the name implies, this just sets the
> > >> innerHTML of any elements named in returnTargets).  And lastly, there is
> > >> very little commenting or proper error handling in spots.
> > >>
> > >> Like I said, a very simple example, but I think it gets the point
> > >> across.
> > >>
> > >> Also included is the change to BaseTagHandler, the only altered class
> > >> from
> > >> the taglib (no Struts core changes, as one would expect).  As I
> > >> mentioned,
> > >> there is a plug-in required for this, and there are a total of six new
> > >> classes, all dealing with storing the configuration information.
> > >>
> > >> So, the question is, does anyone see this as something interesting?  Is
> > >> anyone interested in seeing this actually finished up?  If so I can do
> > >> that, probably by the weekend if things go well, and I suppose open a
> > >> ticket for it at that point.
> > >>
> > >> Questions?  Comments?  Whatever?  Thanks all!
> > >>
> > >> --
> > >> Frank W. Zammetti
> > >> Founder and Chief Software Architect
> > >> Omnytex Technologies
> > >> http://www.omnytex.com
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> > >> For additional commands, e-mail: [EMAIL PROTECTED]
> > >>
> > >>
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


-- 
"You can lead a horse to water but you cannot make it float on its back."
~Dakota Jack~

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

Reply via email to