You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by Marcus Breese <mb...@gmail.com> on 2004/06/22 20:22:51 UTC

PATCH: html:cancel tag. Made a javascript version for submitting

I'm submitting this again here because my Bugzilla patch hasn't gone
anywhere, so I don't know if anyone likes this idea or not. 
Basically, if the cancel button is after the submit button on a form,
and the user hits 'enter' to submit the form, the the cancel button is
the one that is activated, causing the form to be cancelled.  So, I
added a "javascript" property to the cancel button, that when true
causes the javascript button to be rendered as a combination html
button and a hidden text field that are linked through a javascript
onclick event.  It is completely backwards compatible and doesn't
break any current pages (that I know of).

If I'm completely out of line sending this here, I appologize...

Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860

PATCH
====================

Index: doc/userGuide/struts-html.xml
===================================================================
RCS file: /home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
retrieving revision 1.67
diff -u -r1.67 struts-html.xml
--- doc/userGuide/struts-html.xml	2 Jan 2004 11:55:38 -0000	1.67
+++ doc/userGuide/struts-html.xml	3 Jan 2004 00:44:06 -0000
@@ -410,6 +410,16 @@
           disabled.
           </info>
         </attribute>
+        <attribute>
+          <name>javascript</name>
+          <required>false</required>
+          <rtexprvalue>true</rtexprvalue>
+          <info>
+          Set to <code>true</code> if this input field should be
+          rendered using a javascript button/hidden field combination
+          as opposed to a submit button.
+          </info>
+        </attribute>
 
         <attribute>
             <name>onblur</name>
Index: src/share/org/apache/struts/taglib/html/CancelTag.java
===================================================================
RCS file: /home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/CancelTag.java,v
retrieving revision 1.13
diff -u -r1.13 CancelTag.java
--- src/share/org/apache/struts/taglib/html/CancelTag.java	31 Jul 2003
00:19:04 -0000	1.13
+++ src/share/org/apache/struts/taglib/html/CancelTag.java	3 Jan 2004
00:44:06 -0000
@@ -106,6 +106,12 @@
      */
     protected String value = null;
 
+	/**
+	 * Should this be rendered using javascript ?
+	 */
+	
+	protected String javascript = null;
+
 
     // ------------------------------------------------------------- Properties
 
@@ -144,6 +150,35 @@
     }
 
 
+
+	/**
+	 * return the javascript value
+	 */
+	public String getJavascript() {
+		return javascript;
+	}
+
+	/**
+	 * @param javascript
+	 */
+	public void setJavascript(String javascript) {
+		this.javascript = javascript;
+	}
+
+	/**
+	 * 
+	 * Return a boolean for if this should be rendered using javascript
+	 */
+
+	public boolean renderJavascript() {
+		if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
+			return true;
+		}
+		return false;
+	}
+
+
+
     // --------------------------------------------------------- Public Methods
 
 
@@ -192,10 +227,14 @@
 
         // Generate an HTML element
         StringBuffer results = new StringBuffer();
-        results.append("<input type=\"submit\"");
-        results.append(" name=\"");
-        results.append(property);
-        results.append("\"");
+		if (renderJavascript()) {
+			results.append("<input type=\"button\"");
+		} else {
+			results.append("<input type=\"submit\"");
+			results.append(" name=\"");
+			results.append(property);
+			results.append("\"");
+		}       
         if (accesskey != null) {
             results.append(" accesskey=\"");
             results.append(accesskey);
@@ -212,12 +251,33 @@
         results.append(prepareEventHandlers());
         results.append(prepareStyles());
         
-        // if no onclick event was provided, put in the cancel script
-        if(results.toString().indexOf("onclick=")==-1){
-          results.append(" onclick=\"bCancel=true;\"");
-        }
-        
-        results.append(getElementClose());
+		if (renderJavascript()) {
+			String insertStr = "
document.getElementById('"+property+"').value='Cancel'; ";
+			insertStr += "
document.getElementById('"+property+"').name='"+property+"'; ";
+			insertStr += " this.form.submit(); ";
+
+			// if no onclick event was provided, put in the cancel script		
+			if(results.toString().indexOf("onclick=")==-1){
+			  results.append(" onclick=\"bCancel=true; ");
+			  results.append(insertStr);
+			} else {
+				int onclickPos = results.toString().indexOf("onclick=\"");
+				int nextQuotePos= results.toString().indexOf("\"",onclickPos+10);
+				results.insert(nextQuotePos,insertStr);
+			}
+	        
+			results.append(getElementClose());
+	
+			results.append("<input type=\"hidden\" id=\""+property+"\" value=\"\">");
+		 } else {
+			// if no onclick event was provided, put in the cancel script		
+	
+			if(results.toString().indexOf("onclick=")==-1){
+				results.append(" onclick=\"bCancel=true;\" ");
+			}
+			results.append(getElementClose());
+         	
+		 } 
 
         // Render this element to our writer
         TagUtils.getInstance().write(pageContext, results.toString());
@@ -233,12 +293,14 @@
      */
     public void release() {
 
-	super.release();
-	property = Constants.CANCEL_PROPERTY;
+		super.release();
+		property = Constants.CANCEL_PROPERTY;
         text = null;
-	value = null;
+		value = null;
+		javascript=null;
 
     }
 
 
 }
+

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: PATCH: html:cancel tag. Made a javascript version for submitting

Posted by Niall Pemberton <ni...@blueyonder.co.uk>.
Comments in line.

----- Original Message ----- 
From: "Marcus Breese" <mb...@gmail.com>
To: "Struts Developers List" <de...@struts.apache.org>
Sent: Tuesday, June 22, 2004 10:29 PM
Subject: Re: PATCH: html:cancel tag. Made a javascript version for
submitting


> I completely agree with your statements regarding a javascript
> requirement.  My only issue is a strict user interface issue.  Meaning
> that the current implementation goes against user interface
> guidelines, specifically that "enter" should submit a form, not cancel
> it.

I don't agree - its nothing to do with the Struts implementation - its a
browser/html issue.

> Perhaps the entire thing could be wrapped in a <noscript> tag to
> display the default (non-javascript behaviour) in the case that the
> user has javascript turned off.
>
> Would something like that be more acceptable?

Not to me - the other points I made about being a non *core* Struts tag and
whether on principle we implement people's custom javascript behaviours or
not still stand.

> I haven't followed the JSTL vs Struts tag debate for a long time, so
> I'm not quite sure how they integrate, but then again, there's always
> something new to learn... : )

Some of them directly replace Struts tags.

> Thanks...

No problem, Sorry don't like to be negative.

Niall

>
> On Tue, 22 Jun 2004 22:03:03 +0100, Niall Pemberton
> <ni...@blueyonder.co.uk> wrote:
> >
> > You're not out of line at all - this list is the place to discuss
> > enhancement requests and requests which come with a patch attached are
more
> > welcome than those without :-)
> >
> > Having said that, I'm against this change. If the user disables
javascript
> > in their browser then the cancel button no longer works. Even with your
> > enhanced patch to turn on/off the additional behaviour  by setting a new
> > javascript attribute to true/false, the fact remains that the cancel
button
> > would stop working with javascript disabled. I bet we would have
questions
> > every week titled "Cancel Button Doesn't Work" on the user list and it
will
> > get boring typing the same "Did you set the javascript='true' attribute
etc
> > etc."
> >
> > You might say that the same arguments is true for the existing
javascript in
> > the CancelTag  (i.e. onclick="bCancel=true") but I wouldn't agree with
that.
> > Although that javascript would also not work with javascript disabled,
the
> > fact is that it interacts with the javascript rendered by the validator
> > framework - that javascript IMO is an optional extra because with
javascript
> > disabled the validator framework's server side validation would still
work
> > and the system would not be *broken*.
> >
> > Another point about the issue you are trying to resolve is that its a
> > browser/html isssue and nothing to do with how Struts works. If we put
in
> > this patch to implement some custom javascript behaviour then what about
the
> > next person who wants their own funky bit of javascript in Struts to
> > implement their custom behaviour?
> >
> > If you look at the CancelTag it doesn't actually do much "Struts" wise -
you
> > could easily do what it does directly in html (including the behaviour
you
> > want), it just saves keystrokes. Maybe Jakarta Taglibs would be a better
> > place for this tag and the behaviour that you want - they have an
"input"
> > tags component.
> >
> > http://jakarta.apache.org/taglibs/doc/input-doc/intro.html
> >
> > When Struts was *born* there wasn't much else around - but now many of
the
> > Struts tags can be replaced with JSTL and the current view (which I
agree
> > with) seems to be that the tags should be split into *core* Struts
tags -
> > tags which implement behaviour specific to Struts and the rest which
will be
> > kept on as "legacy" tags. The idea being that we should only continue to
> > develop *core* tags. IMO the cancel tag falls into the later category -
> > others may differ though.
> >
> > Niall
> >
> >
> >
> > ----- Original Message -----
> > From: "Marcus Breese" <mb...@gmail.com>
> > To: <de...@struts.apache.org>
> > Sent: Tuesday, June 22, 2004 7:22 PM
> > Subject: PATCH: html:cancel tag. Made a javascript version for
submitting
> >
> > > I'm submitting this again here because my Bugzilla patch hasn't gone
> > > anywhere, so I don't know if anyone likes this idea or not.
> > > Basically, if the cancel button is after the submit button on a form,
> > > and the user hits 'enter' to submit the form, the the cancel button is
> > > the one that is activated, causing the form to be cancelled.  So, I
> > > added a "javascript" property to the cancel button, that when true
> > > causes the javascript button to be rendered as a combination html
> > > button and a hidden text field that are linked through a javascript
> > > onclick event.  It is completely backwards compatible and doesn't
> > > break any current pages (that I know of).
> > >
> > > If I'm completely out of line sending this here, I appologize...
> > >
> > > Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860
> > >
> > > PATCH
> > > ====================
> > >
> > > Index: doc/userGuide/struts-html.xml
> > > ===================================================================
> > > RCS file:
/home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
> > > retrieving revision 1.67
> > > diff -u -r1.67 struts-html.xml
> > > --- doc/userGuide/struts-html.xml 2 Jan 2004 11:55:38 -0000 1.67
> > > +++ doc/userGuide/struts-html.xml 3 Jan 2004 00:44:06 -0000
> > > @@ -410,6 +410,16 @@
> > >            disabled.
> > >            </info>
> > >          </attribute>
> > > +        <attribute>
> > > +          <name>javascript</name>
> > > +          <required>false</required>
> > > +          <rtexprvalue>true</rtexprvalue>
> > > +          <info>
> > > +          Set to <code>true</code> if this input field should be
> > > +          rendered using a javascript button/hidden field combination
> > > +          as opposed to a submit button.
> > > +          </info>
> > > +        </attribute>
> > >
> > >          <attribute>
> > >              <name>onblur</name>
> > > Index: src/share/org/apache/struts/taglib/html/CancelTag.java
> > > ===================================================================
> > > RCS file:
> >
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/Cance
> > lTag.java,v
> > > retrieving revision 1.13
> > > diff -u -r1.13 CancelTag.java
> > > --- src/share/org/apache/struts/taglib/html/CancelTag.java 31 Jul 2003
> > > 00:19:04 -0000 1.13
> > > +++ src/share/org/apache/struts/taglib/html/CancelTag.java 3 Jan 2004
> > > 00:44:06 -0000
> > > @@ -106,6 +106,12 @@
> > >       */
> > >      protected String value = null;
> > >
> > > + /**
> > > + * Should this be rendered using javascript ?
> > > + */
> > > +
> > > + protected String javascript = null;
> > > +
> > >
> > >      // -------------------------------------------------------------
> > Properties
> > >
> > > @@ -144,6 +150,35 @@
> > >      }
> > >
> > >
> > > +
> > > + /**
> > > + * return the javascript value
> > > + */
> > > + public String getJavascript() {
> > > + return javascript;
> > > + }
> > > +
> > > + /**
> > > + * @param javascript
> > > + */
> > > + public void setJavascript(String javascript) {
> > > + this.javascript = javascript;
> > > + }
> > > +
> > > + /**
> > > + *
> > > + * Return a boolean for if this should be rendered using javascript
> > > + */
> > > +
> > > + public boolean renderJavascript() {
> > > + if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
> > > + return true;
> > > + }
> > > + return false;
> > > + }
> > > +
> > > +
> > > +
> > >      // --------------------------------------------------------- 
Public
> > Methods
> > >
> > >
> > > @@ -192,10 +227,14 @@
> > >
> > >          // Generate an HTML element
> > >          StringBuffer results = new StringBuffer();
> > > -        results.append("<input type=\"submit\"");
> > > -        results.append(" name=\"");
> > > -        results.append(property);
> > > -        results.append("\"");
> > > + if (renderJavascript()) {
> > > + results.append("<input type=\"button\"");
> > > + } else {
> > > + results.append("<input type=\"submit\"");
> > > + results.append(" name=\"");
> > > + results.append(property);
> > > + results.append("\"");
> > > + }
> > >          if (accesskey != null) {
> > >              results.append(" accesskey=\"");
> > >              results.append(accesskey);
> > > @@ -212,12 +251,33 @@
> > >          results.append(prepareEventHandlers());
> > >          results.append(prepareStyles());
> > >
> > > -        // if no onclick event was provided, put in the cancel script
> > > -        if(results.toString().indexOf("onclick=")==-1){
> > > -          results.append(" onclick=\"bCancel=true;\"");
> > > -        }
> > > -
> > > -        results.append(getElementClose());
> > > + if (renderJavascript()) {
> > > + String insertStr = "
> > > document.getElementById('"+property+"').value='Cancel'; ";
> > > + insertStr += "
> > > document.getElementById('"+property+"').name='"+property+"'; ";
> > > + insertStr += " this.form.submit(); ";
> > > +
> > > + // if no onclick event was provided, put in the cancel script
> > > + if(results.toString().indexOf("onclick=")==-1){
> > > +   results.append(" onclick=\"bCancel=true; ");
> > > +   results.append(insertStr);
> > > + } else {
> > > + int onclickPos = results.toString().indexOf("onclick=\"");
> > > + int nextQuotePos= results.toString().indexOf("\"",onclickPos+10);
> > > + results.insert(nextQuotePos,insertStr);
> > > + }
> > > +
> > > + results.append(getElementClose());
> > > +
> > > + results.append("<input type=\"hidden\" id=\""+property+"\"
> > value=\"\">");
> > > + } else {
> > > + // if no onclick event was provided, put in the cancel script
> > > +
> > > + if(results.toString().indexOf("onclick=")==-1){
> > > + results.append(" onclick=\"bCancel=true;\" ");
> > > + }
> > > + results.append(getElementClose());
> > > +
> > > + }
> > >
> > >          // Render this element to our writer
> > >          TagUtils.getInstance().write(pageContext,
results.toString());
> > > @@ -233,12 +293,14 @@
> > >       */
> > >      public void release() {
> > >
> > > - super.release();
> > > - property = Constants.CANCEL_PROPERTY;
> > > + super.release();
> > > + property = Constants.CANCEL_PROPERTY;
> > >          text = null;
> > > - value = null;
> > > + value = null;
> > > + javascript=null;
> > >
> > >      }
> > >
> > >
> > >  }
> > > +
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> > > For additional commands, e-mail: dev-help@struts.apache.org
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> > For additional commands, e-mail: dev-help@struts.apache.org
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: PATCH: html:cancel tag. Made a javascript version for submitting

Posted by Marcus Breese <mb...@gmail.com>.
I completely agree with your statements regarding a javascript
requirement.  My only issue is a strict user interface issue.  Meaning
that the current implementation goes against user interface
guidelines, specifically that "enter" should submit a form, not cancel
it.

Perhaps the entire thing could be wrapped in a <noscript> tag to
display the default (non-javascript behaviour) in the case that the
user has javascript turned off.

Would something like that be more acceptable?

I haven't followed the JSTL vs Struts tag debate for a long time, so
I'm not quite sure how they integrate, but then again, there's always
something new to learn... : )

Thanks...

On Tue, 22 Jun 2004 22:03:03 +0100, Niall Pemberton
<ni...@blueyonder.co.uk> wrote:
> 
> You're not out of line at all - this list is the place to discuss
> enhancement requests and requests which come with a patch attached are more
> welcome than those without :-)
> 
> Having said that, I'm against this change. If the user disables javascript
> in their browser then the cancel button no longer works. Even with your
> enhanced patch to turn on/off the additional behaviour  by setting a new
> javascript attribute to true/false, the fact remains that the cancel button
> would stop working with javascript disabled. I bet we would have questions
> every week titled "Cancel Button Doesn't Work" on the user list and it will
> get boring typing the same "Did you set the javascript='true' attribute etc
> etc."
> 
> You might say that the same arguments is true for the existing javascript in
> the CancelTag  (i.e. onclick="bCancel=true") but I wouldn't agree with that.
> Although that javascript would also not work with javascript disabled, the
> fact is that it interacts with the javascript rendered by the validator
> framework - that javascript IMO is an optional extra because with javascript
> disabled the validator framework's server side validation would still work
> and the system would not be *broken*.
> 
> Another point about the issue you are trying to resolve is that its a
> browser/html isssue and nothing to do with how Struts works. If we put in
> this patch to implement some custom javascript behaviour then what about the
> next person who wants their own funky bit of javascript in Struts to
> implement their custom behaviour?
> 
> If you look at the CancelTag it doesn't actually do much "Struts" wise - you
> could easily do what it does directly in html (including the behaviour you
> want), it just saves keystrokes. Maybe Jakarta Taglibs would be a better
> place for this tag and the behaviour that you want - they have an "input"
> tags component.
> 
> http://jakarta.apache.org/taglibs/doc/input-doc/intro.html
> 
> When Struts was *born* there wasn't much else around - but now many of the
> Struts tags can be replaced with JSTL and the current view (which I agree
> with) seems to be that the tags should be split into *core* Struts tags -
> tags which implement behaviour specific to Struts and the rest which will be
> kept on as "legacy" tags. The idea being that we should only continue to
> develop *core* tags. IMO the cancel tag falls into the later category -
> others may differ though.
> 
> Niall
> 
> 
> 
> ----- Original Message -----
> From: "Marcus Breese" <mb...@gmail.com>
> To: <de...@struts.apache.org>
> Sent: Tuesday, June 22, 2004 7:22 PM
> Subject: PATCH: html:cancel tag. Made a javascript version for submitting
> 
> > I'm submitting this again here because my Bugzilla patch hasn't gone
> > anywhere, so I don't know if anyone likes this idea or not.
> > Basically, if the cancel button is after the submit button on a form,
> > and the user hits 'enter' to submit the form, the the cancel button is
> > the one that is activated, causing the form to be cancelled.  So, I
> > added a "javascript" property to the cancel button, that when true
> > causes the javascript button to be rendered as a combination html
> > button and a hidden text field that are linked through a javascript
> > onclick event.  It is completely backwards compatible and doesn't
> > break any current pages (that I know of).
> >
> > If I'm completely out of line sending this here, I appologize...
> >
> > Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860
> >
> > PATCH
> > ====================
> >
> > Index: doc/userGuide/struts-html.xml
> > ===================================================================
> > RCS file: /home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
> > retrieving revision 1.67
> > diff -u -r1.67 struts-html.xml
> > --- doc/userGuide/struts-html.xml 2 Jan 2004 11:55:38 -0000 1.67
> > +++ doc/userGuide/struts-html.xml 3 Jan 2004 00:44:06 -0000
> > @@ -410,6 +410,16 @@
> >            disabled.
> >            </info>
> >          </attribute>
> > +        <attribute>
> > +          <name>javascript</name>
> > +          <required>false</required>
> > +          <rtexprvalue>true</rtexprvalue>
> > +          <info>
> > +          Set to <code>true</code> if this input field should be
> > +          rendered using a javascript button/hidden field combination
> > +          as opposed to a submit button.
> > +          </info>
> > +        </attribute>
> >
> >          <attribute>
> >              <name>onblur</name>
> > Index: src/share/org/apache/struts/taglib/html/CancelTag.java
> > ===================================================================
> > RCS file:
> /home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/Cance
> lTag.java,v
> > retrieving revision 1.13
> > diff -u -r1.13 CancelTag.java
> > --- src/share/org/apache/struts/taglib/html/CancelTag.java 31 Jul 2003
> > 00:19:04 -0000 1.13
> > +++ src/share/org/apache/struts/taglib/html/CancelTag.java 3 Jan 2004
> > 00:44:06 -0000
> > @@ -106,6 +106,12 @@
> >       */
> >      protected String value = null;
> >
> > + /**
> > + * Should this be rendered using javascript ?
> > + */
> > +
> > + protected String javascript = null;
> > +
> >
> >      // -------------------------------------------------------------
> Properties
> >
> > @@ -144,6 +150,35 @@
> >      }
> >
> >
> > +
> > + /**
> > + * return the javascript value
> > + */
> > + public String getJavascript() {
> > + return javascript;
> > + }
> > +
> > + /**
> > + * @param javascript
> > + */
> > + public void setJavascript(String javascript) {
> > + this.javascript = javascript;
> > + }
> > +
> > + /**
> > + *
> > + * Return a boolean for if this should be rendered using javascript
> > + */
> > +
> > + public boolean renderJavascript() {
> > + if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
> > + return true;
> > + }
> > + return false;
> > + }
> > +
> > +
> > +
> >      // --------------------------------------------------------- Public
> Methods
> >
> >
> > @@ -192,10 +227,14 @@
> >
> >          // Generate an HTML element
> >          StringBuffer results = new StringBuffer();
> > -        results.append("<input type=\"submit\"");
> > -        results.append(" name=\"");
> > -        results.append(property);
> > -        results.append("\"");
> > + if (renderJavascript()) {
> > + results.append("<input type=\"button\"");
> > + } else {
> > + results.append("<input type=\"submit\"");
> > + results.append(" name=\"");
> > + results.append(property);
> > + results.append("\"");
> > + }
> >          if (accesskey != null) {
> >              results.append(" accesskey=\"");
> >              results.append(accesskey);
> > @@ -212,12 +251,33 @@
> >          results.append(prepareEventHandlers());
> >          results.append(prepareStyles());
> >
> > -        // if no onclick event was provided, put in the cancel script
> > -        if(results.toString().indexOf("onclick=")==-1){
> > -          results.append(" onclick=\"bCancel=true;\"");
> > -        }
> > -
> > -        results.append(getElementClose());
> > + if (renderJavascript()) {
> > + String insertStr = "
> > document.getElementById('"+property+"').value='Cancel'; ";
> > + insertStr += "
> > document.getElementById('"+property+"').name='"+property+"'; ";
> > + insertStr += " this.form.submit(); ";
> > +
> > + // if no onclick event was provided, put in the cancel script
> > + if(results.toString().indexOf("onclick=")==-1){
> > +   results.append(" onclick=\"bCancel=true; ");
> > +   results.append(insertStr);
> > + } else {
> > + int onclickPos = results.toString().indexOf("onclick=\"");
> > + int nextQuotePos= results.toString().indexOf("\"",onclickPos+10);
> > + results.insert(nextQuotePos,insertStr);
> > + }
> > +
> > + results.append(getElementClose());
> > +
> > + results.append("<input type=\"hidden\" id=\""+property+"\"
> value=\"\">");
> > + } else {
> > + // if no onclick event was provided, put in the cancel script
> > +
> > + if(results.toString().indexOf("onclick=")==-1){
> > + results.append(" onclick=\"bCancel=true;\" ");
> > + }
> > + results.append(getElementClose());
> > +
> > + }
> >
> >          // Render this element to our writer
> >          TagUtils.getInstance().write(pageContext, results.toString());
> > @@ -233,12 +293,14 @@
> >       */
> >      public void release() {
> >
> > - super.release();
> > - property = Constants.CANCEL_PROPERTY;
> > + super.release();
> > + property = Constants.CANCEL_PROPERTY;
> >          text = null;
> > - value = null;
> > + value = null;
> > + javascript=null;
> >
> >      }
> >
> >
> >  }
> > +
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> > For additional commands, e-mail: dev-help@struts.apache.org
> >
> >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: PATCH: html:cancel tag. Made a javascript version for submitting

Posted by Marcus Breese <mb...@gmail.com>.
I actually agree with everything that you've said.  I just have one
issue.  The struts tag libs are still heavily used, and haven't been
deprecated.  If they aren't part of the core struts package, then they
should be deprecated and moved to a different project.

On Tue, 22 Jun 2004 15:21:25 -0700 (PDT), David Graham
<gr...@yahoo.com> wrote:
> 
> Well said Niall.  IMO, tags with any of the following properties don't
> belong in Struts:
> 1.  They don't interact with core Struts resources/framework.
> 2.  They use javascript that may not work in all browsers.
> 3.  They generate non-standard HTML.
> 4.  They duplicate functionality already available in the JSTL.
> 
> Many times Jakarta Taglibs is a more suitable home for these tags.
> 
> David
> 
> --- Niall Pemberton <ni...@blueyonder.co.uk> wrote:
> > You're not out of line at all - this list is the place to discuss
> > enhancement requests and requests which come with a patch attached are
> > more
> > welcome than those without :-)
> >
> > Having said that, I'm against this change. If the user disables
> > javascript
> > in their browser then the cancel button no longer works. Even with your
> > enhanced patch to turn on/off the additional behaviour  by setting a new
> > javascript attribute to true/false, the fact remains that the cancel
> > button
> > would stop working with javascript disabled. I bet we would have
> > questions
> > every week titled "Cancel Button Doesn't Work" on the user list and it
> > will
> > get boring typing the same "Did you set the javascript='true' attribute
> > etc
> > etc."
> >
> > You might say that the same arguments is true for the existing
> > javascript in
> > the CancelTag  (i.e. onclick="bCancel=true") but I wouldn't agree with
> > that.
> > Although that javascript would also not work with javascript disabled,
> > the
> > fact is that it interacts with the javascript rendered by the validator
> > framework - that javascript IMO is an optional extra because with
> > javascript
> > disabled the validator framework's server side validation would still
> > work
> > and the system would not be *broken*.
> >
> > Another point about the issue you are trying to resolve is that its a
> > browser/html isssue and nothing to do with how Struts works. If we put
> > in
> > this patch to implement some custom javascript behaviour then what about
> > the
> > next person who wants their own funky bit of javascript in Struts to
> > implement their custom behaviour?
> >
> > If you look at the CancelTag it doesn't actually do much "Struts" wise -
> > you
> > could easily do what it does directly in html (including the behaviour
> > you
> > want), it just saves keystrokes. Maybe Jakarta Taglibs would be a better
> > place for this tag and the behaviour that you want - they have an
> > "input"
> > tags component.
> >
> > http://jakarta.apache.org/taglibs/doc/input-doc/intro.html
> >
> > When Struts was *born* there wasn't much else around - but now many of
> > the
> > Struts tags can be replaced with JSTL and the current view (which I
> > agree
> > with) seems to be that the tags should be split into *core* Struts tags
> > -
> > tags which implement behaviour specific to Struts and the rest which
> > will be
> > kept on as "legacy" tags. The idea being that we should only continue to
> > develop *core* tags. IMO the cancel tag falls into the later category -
> > others may differ though.
> >
> > Niall
> >
> > ----- Original Message -----
> > From: "Marcus Breese" <mb...@gmail.com>
> > To: <de...@struts.apache.org>
> > Sent: Tuesday, June 22, 2004 7:22 PM
> > Subject: PATCH: html:cancel tag. Made a javascript version for
> > submitting
> >
> >
> > > I'm submitting this again here because my Bugzilla patch hasn't gone
> > > anywhere, so I don't know if anyone likes this idea or not.
> > > Basically, if the cancel button is after the submit button on a form,
> > > and the user hits 'enter' to submit the form, the the cancel button is
> > > the one that is activated, causing the form to be cancelled.  So, I
> > > added a "javascript" property to the cancel button, that when true
> > > causes the javascript button to be rendered as a combination html
> > > button and a hidden text field that are linked through a javascript
> > > onclick event.  It is completely backwards compatible and doesn't
> > > break any current pages (that I know of).
> > >
> > > If I'm completely out of line sending this here, I appologize...
> > >
> > > Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860
> > >
> > > PATCH
> > > ====================
> > >
> > > Index: doc/userGuide/struts-html.xml
> > > ===================================================================
> > > RCS file:
> > /home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
> > > retrieving revision 1.67
> > > diff -u -r1.67 struts-html.xml
> > > --- doc/userGuide/struts-html.xml 2 Jan 2004 11:55:38 -0000 1.67
> > > +++ doc/userGuide/struts-html.xml 3 Jan 2004 00:44:06 -0000
> > > @@ -410,6 +410,16 @@
> > >            disabled.
> > >            </info>
> > >          </attribute>
> > > +        <attribute>
> > > +          <name>javascript</name>
> > > +          <required>false</required>
> > > +          <rtexprvalue>true</rtexprvalue>
> > > +          <info>
> > > +          Set to <code>true</code> if this input field should be
> > > +          rendered using a javascript button/hidden field combination
> > > +          as opposed to a submit button.
> > > +          </info>
> > > +        </attribute>
> > >
> > >          <attribute>
> > >              <name>onblur</name>
> > > Index: src/share/org/apache/struts/taglib/html/CancelTag.java
> > > ===================================================================
> > > RCS file:
> >
> /home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/Cance
> > lTag.java,v
> > > retrieving revision 1.13
> > > diff -u -r1.13 CancelTag.java
> > > --- src/share/org/apache/struts/taglib/html/CancelTag.java 31 Jul 2003
> > > 00:19:04 -0000 1.13
> > > +++ src/share/org/apache/struts/taglib/html/CancelTag.java 3 Jan 2004
> > > 00:44:06 -0000
> > > @@ -106,6 +106,12 @@
> > >       */
> > >      protected String value = null;
> > >
> > > + /**
> > > + * Should this be rendered using javascript ?
> > > + */
> > > +
> > > + protected String javascript = null;
> > > +
> > >
> > >      // -------------------------------------------------------------
> > Properties
> > >
> > > @@ -144,6 +150,35 @@
> > >      }
> > >
> > >
> > > +
> > > + /**
> > > + * return the javascript value
> > > + */
> > > + public String getJavascript() {
> > > + return javascript;
> > > + }
> > > +
> > > + /**
> > > + * @param javascript
> > > + */
> > > + public void setJavascript(String javascript) {
> > > + this.javascript = javascript;
> > > + }
> > > +
> > > + /**
> > > + *
> > > + * Return a boolean for if this should be rendered using javascript
> > > + */
> > > +
> > > + public boolean renderJavascript() {
> > > + if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
> > > + return true;
> > > + }
> > > + return false;
> > > + }
> > > +
> > > +
> > > +
> > >      // ---------------------------------------------------------
> > Public
> > Methods
> > >
> > >
> > > @@ -192,10 +227,14 @@
> > >
> > >          // Generate an HTML element
> > >          StringBuffer results = new StringBuffer();
> > > -        results.append("<input type=\"submit\"");
> > > -        results.append(" name=\"");
> > > -        results.append(property);
> > > -        results.append("\"");
> > > + if (renderJavascript()) {
> > > + results.append("<input type=\"button\"");
> > > + } else {
> > > + results.append("<input type=\"submit\"");
> > > + results.append(" name=\"");
> > > + results.append(property);
> > > + results.append("\"");
> > > + }
> > >          if (accesskey != null) {
> > >              results.append(" accesskey=\"");
> > >              results.append(accesskey);
> > > @@ -212,12 +251,33 @@
> > >          results.append(prepareEventHandlers());
> > >          results.append(prepareStyles());
> > 
> === message truncated ===
> 
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail - You care about security. So do we.
> http://promotions.yahoo.com/new_mail
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: PATCH: html:cancel tag. Made a javascript version for submitting

Posted by David Graham <gr...@yahoo.com>.
Well said Niall.  IMO, tags with any of the following properties don't
belong in Struts:
1.  They don't interact with core Struts resources/framework.
2.  They use javascript that may not work in all browsers.
3.  They generate non-standard HTML.
4.  They duplicate functionality already available in the JSTL.

Many times Jakarta Taglibs is a more suitable home for these tags.

David

--- Niall Pemberton <ni...@blueyonder.co.uk> wrote:
> You're not out of line at all - this list is the place to discuss
> enhancement requests and requests which come with a patch attached are
> more
> welcome than those without :-)
> 
> Having said that, I'm against this change. If the user disables
> javascript
> in their browser then the cancel button no longer works. Even with your
> enhanced patch to turn on/off the additional behaviour  by setting a new
> javascript attribute to true/false, the fact remains that the cancel
> button
> would stop working with javascript disabled. I bet we would have
> questions
> every week titled "Cancel Button Doesn't Work" on the user list and it
> will
> get boring typing the same "Did you set the javascript='true' attribute
> etc
> etc."
> 
> You might say that the same arguments is true for the existing
> javascript in
> the CancelTag  (i.e. onclick="bCancel=true") but I wouldn't agree with
> that.
> Although that javascript would also not work with javascript disabled,
> the
> fact is that it interacts with the javascript rendered by the validator
> framework - that javascript IMO is an optional extra because with
> javascript
> disabled the validator framework's server side validation would still
> work
> and the system would not be *broken*.
> 
> Another point about the issue you are trying to resolve is that its a
> browser/html isssue and nothing to do with how Struts works. If we put
> in
> this patch to implement some custom javascript behaviour then what about
> the
> next person who wants their own funky bit of javascript in Struts to
> implement their custom behaviour?
> 
> If you look at the CancelTag it doesn't actually do much "Struts" wise -
> you
> could easily do what it does directly in html (including the behaviour
> you
> want), it just saves keystrokes. Maybe Jakarta Taglibs would be a better
> place for this tag and the behaviour that you want - they have an
> "input"
> tags component.
> 
> http://jakarta.apache.org/taglibs/doc/input-doc/intro.html
> 
> When Struts was *born* there wasn't much else around - but now many of
> the
> Struts tags can be replaced with JSTL and the current view (which I
> agree
> with) seems to be that the tags should be split into *core* Struts tags
> -
> tags which implement behaviour specific to Struts and the rest which
> will be
> kept on as "legacy" tags. The idea being that we should only continue to
> develop *core* tags. IMO the cancel tag falls into the later category -
> others may differ though.
> 
> Niall
> 
> ----- Original Message ----- 
> From: "Marcus Breese" <mb...@gmail.com>
> To: <de...@struts.apache.org>
> Sent: Tuesday, June 22, 2004 7:22 PM
> Subject: PATCH: html:cancel tag. Made a javascript version for
> submitting
> 
> 
> > I'm submitting this again here because my Bugzilla patch hasn't gone
> > anywhere, so I don't know if anyone likes this idea or not.
> > Basically, if the cancel button is after the submit button on a form,
> > and the user hits 'enter' to submit the form, the the cancel button is
> > the one that is activated, causing the form to be cancelled.  So, I
> > added a "javascript" property to the cancel button, that when true
> > causes the javascript button to be rendered as a combination html
> > button and a hidden text field that are linked through a javascript
> > onclick event.  It is completely backwards compatible and doesn't
> > break any current pages (that I know of).
> >
> > If I'm completely out of line sending this here, I appologize...
> >
> > Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860
> >
> > PATCH
> > ====================
> >
> > Index: doc/userGuide/struts-html.xml
> > ===================================================================
> > RCS file:
> /home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
> > retrieving revision 1.67
> > diff -u -r1.67 struts-html.xml
> > --- doc/userGuide/struts-html.xml 2 Jan 2004 11:55:38 -0000 1.67
> > +++ doc/userGuide/struts-html.xml 3 Jan 2004 00:44:06 -0000
> > @@ -410,6 +410,16 @@
> >            disabled.
> >            </info>
> >          </attribute>
> > +        <attribute>
> > +          <name>javascript</name>
> > +          <required>false</required>
> > +          <rtexprvalue>true</rtexprvalue>
> > +          <info>
> > +          Set to <code>true</code> if this input field should be
> > +          rendered using a javascript button/hidden field combination
> > +          as opposed to a submit button.
> > +          </info>
> > +        </attribute>
> >
> >          <attribute>
> >              <name>onblur</name>
> > Index: src/share/org/apache/struts/taglib/html/CancelTag.java
> > ===================================================================
> > RCS file:
>
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/Cance
> lTag.java,v
> > retrieving revision 1.13
> > diff -u -r1.13 CancelTag.java
> > --- src/share/org/apache/struts/taglib/html/CancelTag.java 31 Jul 2003
> > 00:19:04 -0000 1.13
> > +++ src/share/org/apache/struts/taglib/html/CancelTag.java 3 Jan 2004
> > 00:44:06 -0000
> > @@ -106,6 +106,12 @@
> >       */
> >      protected String value = null;
> >
> > + /**
> > + * Should this be rendered using javascript ?
> > + */
> > +
> > + protected String javascript = null;
> > +
> >
> >      // ------------------------------------------------------------- 
> Properties
> >
> > @@ -144,6 +150,35 @@
> >      }
> >
> >
> > +
> > + /**
> > + * return the javascript value
> > + */
> > + public String getJavascript() {
> > + return javascript;
> > + }
> > +
> > + /**
> > + * @param javascript
> > + */
> > + public void setJavascript(String javascript) {
> > + this.javascript = javascript;
> > + }
> > +
> > + /**
> > + *
> > + * Return a boolean for if this should be rendered using javascript
> > + */
> > +
> > + public boolean renderJavascript() {
> > + if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
> > + return true;
> > + }
> > + return false;
> > + }
> > +
> > +
> > +
> >      // ---------------------------------------------------------
> Public
> Methods
> >
> >
> > @@ -192,10 +227,14 @@
> >
> >          // Generate an HTML element
> >          StringBuffer results = new StringBuffer();
> > -        results.append("<input type=\"submit\"");
> > -        results.append(" name=\"");
> > -        results.append(property);
> > -        results.append("\"");
> > + if (renderJavascript()) {
> > + results.append("<input type=\"button\"");
> > + } else {
> > + results.append("<input type=\"submit\"");
> > + results.append(" name=\"");
> > + results.append(property);
> > + results.append("\"");
> > + }
> >          if (accesskey != null) {
> >              results.append(" accesskey=\"");
> >              results.append(accesskey);
> > @@ -212,12 +251,33 @@
> >          results.append(prepareEventHandlers());
> >          results.append(prepareStyles());
> 
=== message truncated ===



		
__________________________________
Do you Yahoo!?
Yahoo! Mail - You care about security. So do we.
http://promotions.yahoo.com/new_mail

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Re: PATCH: html:cancel tag. Made a javascript version for submitting

Posted by Niall Pemberton <ni...@blueyonder.co.uk>.
You're not out of line at all - this list is the place to discuss
enhancement requests and requests which come with a patch attached are more
welcome than those without :-)

Having said that, I'm against this change. If the user disables javascript
in their browser then the cancel button no longer works. Even with your
enhanced patch to turn on/off the additional behaviour  by setting a new
javascript attribute to true/false, the fact remains that the cancel button
would stop working with javascript disabled. I bet we would have questions
every week titled "Cancel Button Doesn't Work" on the user list and it will
get boring typing the same "Did you set the javascript='true' attribute etc
etc."

You might say that the same arguments is true for the existing javascript in
the CancelTag  (i.e. onclick="bCancel=true") but I wouldn't agree with that.
Although that javascript would also not work with javascript disabled, the
fact is that it interacts with the javascript rendered by the validator
framework - that javascript IMO is an optional extra because with javascript
disabled the validator framework's server side validation would still work
and the system would not be *broken*.

Another point about the issue you are trying to resolve is that its a
browser/html isssue and nothing to do with how Struts works. If we put in
this patch to implement some custom javascript behaviour then what about the
next person who wants their own funky bit of javascript in Struts to
implement their custom behaviour?

If you look at the CancelTag it doesn't actually do much "Struts" wise - you
could easily do what it does directly in html (including the behaviour you
want), it just saves keystrokes. Maybe Jakarta Taglibs would be a better
place for this tag and the behaviour that you want - they have an "input"
tags component.

http://jakarta.apache.org/taglibs/doc/input-doc/intro.html

When Struts was *born* there wasn't much else around - but now many of the
Struts tags can be replaced with JSTL and the current view (which I agree
with) seems to be that the tags should be split into *core* Struts tags -
tags which implement behaviour specific to Struts and the rest which will be
kept on as "legacy" tags. The idea being that we should only continue to
develop *core* tags. IMO the cancel tag falls into the later category -
others may differ though.

Niall

----- Original Message ----- 
From: "Marcus Breese" <mb...@gmail.com>
To: <de...@struts.apache.org>
Sent: Tuesday, June 22, 2004 7:22 PM
Subject: PATCH: html:cancel tag. Made a javascript version for submitting


> I'm submitting this again here because my Bugzilla patch hasn't gone
> anywhere, so I don't know if anyone likes this idea or not.
> Basically, if the cancel button is after the submit button on a form,
> and the user hits 'enter' to submit the form, the the cancel button is
> the one that is activated, causing the form to be cancelled.  So, I
> added a "javascript" property to the cancel button, that when true
> causes the javascript button to be rendered as a combination html
> button and a hidden text field that are linked through a javascript
> onclick event.  It is completely backwards compatible and doesn't
> break any current pages (that I know of).
>
> If I'm completely out of line sending this here, I appologize...
>
> Bugzilla link: http://issues.apache.org/bugzilla/show_bug.cgi?id=25860
>
> PATCH
> ====================
>
> Index: doc/userGuide/struts-html.xml
> ===================================================================
> RCS file: /home/cvspublic/jakarta-struts/doc/userGuide/struts-html.xml,v
> retrieving revision 1.67
> diff -u -r1.67 struts-html.xml
> --- doc/userGuide/struts-html.xml 2 Jan 2004 11:55:38 -0000 1.67
> +++ doc/userGuide/struts-html.xml 3 Jan 2004 00:44:06 -0000
> @@ -410,6 +410,16 @@
>            disabled.
>            </info>
>          </attribute>
> +        <attribute>
> +          <name>javascript</name>
> +          <required>false</required>
> +          <rtexprvalue>true</rtexprvalue>
> +          <info>
> +          Set to <code>true</code> if this input field should be
> +          rendered using a javascript button/hidden field combination
> +          as opposed to a submit button.
> +          </info>
> +        </attribute>
>
>          <attribute>
>              <name>onblur</name>
> Index: src/share/org/apache/struts/taglib/html/CancelTag.java
> ===================================================================
> RCS file:
/home/cvspublic/jakarta-struts/src/share/org/apache/struts/taglib/html/Cance
lTag.java,v
> retrieving revision 1.13
> diff -u -r1.13 CancelTag.java
> --- src/share/org/apache/struts/taglib/html/CancelTag.java 31 Jul 2003
> 00:19:04 -0000 1.13
> +++ src/share/org/apache/struts/taglib/html/CancelTag.java 3 Jan 2004
> 00:44:06 -0000
> @@ -106,6 +106,12 @@
>       */
>      protected String value = null;
>
> + /**
> + * Should this be rendered using javascript ?
> + */
> +
> + protected String javascript = null;
> +
>
>      // ------------------------------------------------------------- 
Properties
>
> @@ -144,6 +150,35 @@
>      }
>
>
> +
> + /**
> + * return the javascript value
> + */
> + public String getJavascript() {
> + return javascript;
> + }
> +
> + /**
> + * @param javascript
> + */
> + public void setJavascript(String javascript) {
> + this.javascript = javascript;
> + }
> +
> + /**
> + *
> + * Return a boolean for if this should be rendered using javascript
> + */
> +
> + public boolean renderJavascript() {
> + if (javascript!=null && javascript.toUpperCase().equals("TRUE")) {
> + return true;
> + }
> + return false;
> + }
> +
> +
> +
>      // --------------------------------------------------------- Public
Methods
>
>
> @@ -192,10 +227,14 @@
>
>          // Generate an HTML element
>          StringBuffer results = new StringBuffer();
> -        results.append("<input type=\"submit\"");
> -        results.append(" name=\"");
> -        results.append(property);
> -        results.append("\"");
> + if (renderJavascript()) {
> + results.append("<input type=\"button\"");
> + } else {
> + results.append("<input type=\"submit\"");
> + results.append(" name=\"");
> + results.append(property);
> + results.append("\"");
> + }
>          if (accesskey != null) {
>              results.append(" accesskey=\"");
>              results.append(accesskey);
> @@ -212,12 +251,33 @@
>          results.append(prepareEventHandlers());
>          results.append(prepareStyles());
>
> -        // if no onclick event was provided, put in the cancel script
> -        if(results.toString().indexOf("onclick=")==-1){
> -          results.append(" onclick=\"bCancel=true;\"");
> -        }
> -
> -        results.append(getElementClose());
> + if (renderJavascript()) {
> + String insertStr = "
> document.getElementById('"+property+"').value='Cancel'; ";
> + insertStr += "
> document.getElementById('"+property+"').name='"+property+"'; ";
> + insertStr += " this.form.submit(); ";
> +
> + // if no onclick event was provided, put in the cancel script
> + if(results.toString().indexOf("onclick=")==-1){
> +   results.append(" onclick=\"bCancel=true; ");
> +   results.append(insertStr);
> + } else {
> + int onclickPos = results.toString().indexOf("onclick=\"");
> + int nextQuotePos= results.toString().indexOf("\"",onclickPos+10);
> + results.insert(nextQuotePos,insertStr);
> + }
> +
> + results.append(getElementClose());
> +
> + results.append("<input type=\"hidden\" id=\""+property+"\"
value=\"\">");
> + } else {
> + // if no onclick event was provided, put in the cancel script
> +
> + if(results.toString().indexOf("onclick=")==-1){
> + results.append(" onclick=\"bCancel=true;\" ");
> + }
> + results.append(getElementClose());
> +
> + }
>
>          // Render this element to our writer
>          TagUtils.getInstance().write(pageContext, results.toString());
> @@ -233,12 +293,14 @@
>       */
>      public void release() {
>
> - super.release();
> - property = Constants.CANCEL_PROPERTY;
> + super.release();
> + property = Constants.CANCEL_PROPERTY;
>          text = null;
> - value = null;
> + value = null;
> + javascript=null;
>
>      }
>
>
>  }
> +
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org