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]

Reply via email to