You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Dan Tanner <da...@dantanner.com> on 2001/12/07 20:11:05 UTC

lost form data when validate returns errors

I'm having the problem of losing form data when my action class returns 
errors.  The error displays properly, but I lose all the form data.

Looking at older posts, I've seen the same problem, but haven't seen a 
fix or workaround yet.  I've included the relevant code snippets.

Also, I like the added features of the latest validation.jar, but it 
forces me to use a newer version of struts than the 1.0 release because 
of its ActionMessage usage.  Are the latest nightly builds fairly safe, 
or would people recommend I stick with struts 1.0 for production until a 
new major release comes out?

Thanks in advance for any help.

----------------------------------
     <action
         path="/user/add1"
         type="com.usbank.crm.user.UserAction"
         name="userForm"
         scope="session"
         validate="false"
         input="/user/user1.jsp"
         parameter="add">
       <forward name="continue" path="/user/user1.jsp"/>
       <forward name="cancel" path="/user/main.jsp"/>
     </action>

     <action
         path="/user/edit1"
         type="com.usbank.crm.user.UserAction"
         name="userForm"
         scope="session"
         validate="false"
         input="/user/user1.jsp"
         parameter="select">
       <forward name="continue" path="/user/user2.jsp"/>
       <forward name="cancel" path="/user/main.jsp"/>
     </action>

     <action
         path="/user/save1"
         type="com.usbank.crm.user.UserAction"
         name="userForm"
         scope="session"
         validate="true"
         input="/user/user1.jsp"
         parameter="continue">
       <forward name="continue" path="/user/adduser2.jsp"/>
       <forward name="cancel" path="/user/main.jsp"/>
     </action>

------------------------
public class UserAction extends BaseAction {

     protected ActionForward doAction(ActionMapping mapping,
             ActionForm form, HttpServletRequest request,
             HttpServletResponse response, String action)
     {
         UserForm userForm = (UserForm)form;

         // add user action - this is the initial action when the user
         // enters the page to create a new user
         if ("add".equals(action)) {
             System.err.println("\n\n\n in add action \n\n\n");

             // populate the user type options
             userForm.setUserType(2);

             return (new ActionForward(mapping.getInput()));
         }

         // select - this is to edit an existing user
         if ("select".equals(action)) {
             System.err.println("\n\n\n in select action \n\n\n");

             // get the userid

             // populate the form

             return (new ActionForward(mapping.getInput()));
         }

         // the continue is used for both adds and edits...it validates the
         // data and continues on to the next page if successful.
         if ("continue".equals(action)) {
             System.err.println("\n\n\n in continue action \n\n\n");

             // validate the username isn't already in use
             boolean alreadyExists = true;  // will cause an ActionError

             if (alreadyExists) {
                 ActionErrors errors = new ActionErrors();

                 errors.add(ActionErrors.GLOBAL_ERROR,
                            new 
ActionError("error.username.already.exists"));

                 saveErrors(request, errors);
                 return (mapping.findForward("user1add"));
             }

             return (mapping.findForward("continue"));
         }
-------------------------------------
<html:form action="/user/save1" onsubmit="return validateUserForm(this);">


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: lost form data when validate returns errors

Posted by Ted Husted <hu...@apache.org>.
Dan Tanner wrote:
> 
> I'm having the problem of losing form data when my action class returns
> errors.  The error displays properly, but I lose all the form data.

If you are talking about form data that is generated by an Action, and
not passed back through the HTTP request, then you may need to specify
an Action for the input property, so it can generate it again, instead
of going straight back to the JSP.

-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/struts/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: lost form data when validate returns errors

Posted by David Winterfeldt <dw...@yahoo.com>.
--- Ted Husted <hu...@apache.org> wrote:
> Calling reset is a prelude to autopopulation. Unless
> the request is
> being redirected along the way, this should just put
> the same values
> back into the ActionForm. 
> 
> Reset must be called to ensure that the properties
> for some controls,
> like checkboxes, are set correctly. The default
> reset does nothing. It
> is really only needed for checkboxes.
That's true.  I was thinking that if you have some
inner value objects that you are accidentally setting
to null in the reset instead of reinitializing or
clearing that could cause a problem.

I see you forwarding to this after an error, but I
don;t see the forward defined.
   return (mapping.findForward("user1add"));

David

> 
> Dan Tanner wrote:
> > 
> > >>I'm having the problem of losing form data when
> my
> > >>action class returns
> > >>errors.  The error displays properly, but I lose
> all
> > >>the form data.
> > >>
> > > Maybe there is an issue with the reset method in
> your
> > > ActionForm?  The validation error messages make
> sense?
> > >  If they do then the data is being populated
> correctly
> > > into your ActionForm from you form.
> > 
> > You're right...the form data is getting to the
> action, and for some
> > reason the reset method is getting called when I
> don't think it should.
> >    I have the form info in my action and it passes
> the form's
> > validation, but if I add an error in the action
> and return a new
> > ActionForward, the displayed page doesn't have the
> form info.
> > 
> > I'm a struts newbie, and odds are that I'm just
> missing something really
> > lame, but I've been tearing my hair out trying to
> figure out what it is.
> >     Is it that once a form gets past
> ActionForm.validate, the form data
> > will no longer be returned?  I tried setting the
> form scope to both
> > session and request, to no avail.
> > 
> > Thanks again for any help.
> > 
> > >>
> > >>----------------------------------
> > >>     <action
> > >>         path="/user/add1"
> > >>         type="com.usbank.crm.user.UserAction"
> > >>         name="userForm"
> > >>         scope="session"
> > >>         validate="false"
> > >>         input="/user/user1.jsp"
> > >>         parameter="add">
> > >>       <forward name="continue"
> > >>path="/user/user1.jsp"/>
> > >>       <forward name="cancel"
> > >>path="/user/main.jsp"/>
> > >>     </action>
> > >>
> > >>     <action
> > >>         path="/user/edit1"
> > >>         type="com.usbank.crm.user.UserAction"
> > >>         name="userForm"
> > >>         scope="session"
> > >>         validate="false"
> > >>         input="/user/user1.jsp"
> > >>         parameter="select">
> > >>       <forward name="continue"
> > >>path="/user/user2.jsp"/>
> > >>       <forward name="cancel"
> > >>path="/user/main.jsp"/>
> > >>     </action>
> > >>
> > >>     <action
> > >>         path="/user/save1"
> > >>         type="com.usbank.crm.user.UserAction"
> > >>         name="userForm"
> > >>         scope="session"
> > >>         validate="true"
> > >>         input="/user/user1.jsp"
> > >>         parameter="continue">
> > >>       <forward name="continue"
> > >>path="/user/adduser2.jsp"/>
> > >>       <forward name="cancel"
> > >>path="/user/main.jsp"/>
> > >>     </action>
> > >>
> > >>------------------------
> > >>public class UserAction extends BaseAction {
> > >>
> > >>     protected ActionForward
> doAction(ActionMapping
> > >>mapping,
> > >>             ActionForm form, HttpServletRequest
> > >>request,
> > >>             HttpServletResponse response,
> String
> > >>action)
> > >>     {
> > >>         UserForm userForm = (UserForm)form;
> > >>
> > >>         // add user action - this is the
> initial
> > >>action when the user
> > >>         // enters the page to create a new user
> > >>         if ("add".equals(action)) {
> > >>             System.err.println("\n\n\n in add
> > >>action \n\n\n");
> > >>
> > >>             // populate the user type options
> > >>             userForm.setUserType(2);
> > >>
> > >>             return (new
> > >>ActionForward(mapping.getInput()));
> > >>         }
> > >>
> > >>         // select - this is to edit an existing
> > >>user
> > >>         if ("select".equals(action)) {
> > >>             System.err.println("\n\n\n in
> select
> > >>action \n\n\n");
> > >>
> > >>             // get the userid
> > >>
> > >>             // populate the form
> > >>
> > >>             return (new
> > >>ActionForward(mapping.getInput()));
> > >>         }
> > >>
> > >>         // the continue is used for both adds
> and
> > >>edits...it validates the
> > >>         // data and continues on to the next
> page
> > >>if successful.
> > >>         if ("continue".equals(action)) {
> > >>             System.err.println("\n\n\n in
> continue
> > >>action \n\n\n");
> > >>
> > >>             // validate the username isn't
> already
> > >>in use
> > >>             boolean alreadyExists = true;  //
> will
> > >>cause an ActionError
> > >>
> > >>             if (alreadyExists) {
> > >>                 ActionErrors errors = new
> > >>ActionErrors();
> > >>
> > >>
> > >>errors.add(ActionErrors.GLOBAL_ERROR,
> > >>                            new
> > >>ActionError("error.username.already.exists"));
> > >>
> > >>                 saveErrors(request, errors);
> > >>                 return
> > >>(mapping.findForward("user1add"));
> > >>             }
> > >>
> > >>             return
> > >>(mapping.findForward("continue"));
> > >>         }
> > >>-------------------------------------
> > >><html:form action="/user/save1" onsubmit="return
> > >>validateUserForm(this);">
> > >>
> > >>
> > >>--
> > >>To unsubscribe, e-mail:
> >
>
>><ma...@jakarta.apache.org>
> > >>For additional commands, e-mail:
> > >><ma...@jakarta.apache.org>
> > >>
> > >
> > >
> > >
> __________________________________________________
> > > Do You Yahoo!?
> > > Send your FREE holiday greetings online!
> > > http://greetings.yahoo.com
> > >
> > > --
> > > To unsubscribe, e-mail:  
> <ma...@jakarta.apache.org>
> > > For additional commands, e-mail:
> <ma...@jakarta.apache.org>
> > >
> 
=== message truncated ===


__________________________________________________
Do You Yahoo!?
Send your FREE holiday greetings online!
http://greetings.yahoo.com

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: lost form data when validate returns errors

Posted by Ted Husted <hu...@apache.org>.
Calling reset is a prelude to autopopulation. Unless the request is
being redirected along the way, this should just put the same values
back into the ActionForm. 

Reset must be called to ensure that the properties for some controls,
like checkboxes, are set correctly. The default reset does nothing. It
is really only needed for checkboxes.

Dan Tanner wrote:
> 
> >>I'm having the problem of losing form data when my
> >>action class returns
> >>errors.  The error displays properly, but I lose all
> >>the form data.
> >>
> > Maybe there is an issue with the reset method in your
> > ActionForm?  The validation error messages make sense?
> >  If they do then the data is being populated correctly
> > into your ActionForm from you form.
> 
> You're right...the form data is getting to the action, and for some
> reason the reset method is getting called when I don't think it should.
>    I have the form info in my action and it passes the form's
> validation, but if I add an error in the action and return a new
> ActionForward, the displayed page doesn't have the form info.
> 
> I'm a struts newbie, and odds are that I'm just missing something really
> lame, but I've been tearing my hair out trying to figure out what it is.
>     Is it that once a form gets past ActionForm.validate, the form data
> will no longer be returned?  I tried setting the form scope to both
> session and request, to no avail.
> 
> Thanks again for any help.
> 
> >>
> >>----------------------------------
> >>     <action
> >>         path="/user/add1"
> >>         type="com.usbank.crm.user.UserAction"
> >>         name="userForm"
> >>         scope="session"
> >>         validate="false"
> >>         input="/user/user1.jsp"
> >>         parameter="add">
> >>       <forward name="continue"
> >>path="/user/user1.jsp"/>
> >>       <forward name="cancel"
> >>path="/user/main.jsp"/>
> >>     </action>
> >>
> >>     <action
> >>         path="/user/edit1"
> >>         type="com.usbank.crm.user.UserAction"
> >>         name="userForm"
> >>         scope="session"
> >>         validate="false"
> >>         input="/user/user1.jsp"
> >>         parameter="select">
> >>       <forward name="continue"
> >>path="/user/user2.jsp"/>
> >>       <forward name="cancel"
> >>path="/user/main.jsp"/>
> >>     </action>
> >>
> >>     <action
> >>         path="/user/save1"
> >>         type="com.usbank.crm.user.UserAction"
> >>         name="userForm"
> >>         scope="session"
> >>         validate="true"
> >>         input="/user/user1.jsp"
> >>         parameter="continue">
> >>       <forward name="continue"
> >>path="/user/adduser2.jsp"/>
> >>       <forward name="cancel"
> >>path="/user/main.jsp"/>
> >>     </action>
> >>
> >>------------------------
> >>public class UserAction extends BaseAction {
> >>
> >>     protected ActionForward doAction(ActionMapping
> >>mapping,
> >>             ActionForm form, HttpServletRequest
> >>request,
> >>             HttpServletResponse response, String
> >>action)
> >>     {
> >>         UserForm userForm = (UserForm)form;
> >>
> >>         // add user action - this is the initial
> >>action when the user
> >>         // enters the page to create a new user
> >>         if ("add".equals(action)) {
> >>             System.err.println("\n\n\n in add
> >>action \n\n\n");
> >>
> >>             // populate the user type options
> >>             userForm.setUserType(2);
> >>
> >>             return (new
> >>ActionForward(mapping.getInput()));
> >>         }
> >>
> >>         // select - this is to edit an existing
> >>user
> >>         if ("select".equals(action)) {
> >>             System.err.println("\n\n\n in select
> >>action \n\n\n");
> >>
> >>             // get the userid
> >>
> >>             // populate the form
> >>
> >>             return (new
> >>ActionForward(mapping.getInput()));
> >>         }
> >>
> >>         // the continue is used for both adds and
> >>edits...it validates the
> >>         // data and continues on to the next page
> >>if successful.
> >>         if ("continue".equals(action)) {
> >>             System.err.println("\n\n\n in continue
> >>action \n\n\n");
> >>
> >>             // validate the username isn't already
> >>in use
> >>             boolean alreadyExists = true;  // will
> >>cause an ActionError
> >>
> >>             if (alreadyExists) {
> >>                 ActionErrors errors = new
> >>ActionErrors();
> >>
> >>
> >>errors.add(ActionErrors.GLOBAL_ERROR,
> >>                            new
> >>ActionError("error.username.already.exists"));
> >>
> >>                 saveErrors(request, errors);
> >>                 return
> >>(mapping.findForward("user1add"));
> >>             }
> >>
> >>             return
> >>(mapping.findForward("continue"));
> >>         }
> >>-------------------------------------
> >><html:form action="/user/save1" onsubmit="return
> >>validateUserForm(this);">
> >>
> >>
> >>--
> >>To unsubscribe, e-mail:
> >><ma...@jakarta.apache.org>
> >>For additional commands, e-mail:
> >><ma...@jakarta.apache.org>
> >>
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Send your FREE holiday greetings online!
> > http://greetings.yahoo.com
> >
> > --
> > To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> > For additional commands, e-mail: <ma...@jakarta.apache.org>
> >
> >
> >
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>

-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/struts/

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: lost form data when validate returns errors

Posted by Dan Tanner <da...@dantanner.com>.
>>I'm having the problem of losing form data when my
>>action class returns 
>>errors.  The error displays properly, but I lose all
>>the form data.
>>
> Maybe there is an issue with the reset method in your
> ActionForm?  The validation error messages make sense?
>  If they do then the data is being populated correctly
> into your ActionForm from you form.


You're right...the form data is getting to the action, and for some 
reason the reset method is getting called when I don't think it should. 
   I have the form info in my action and it passes the form's 
validation, but if I add an error in the action and return a new 
ActionForward, the displayed page doesn't have the form info.

I'm a struts newbie, and odds are that I'm just missing something really 
lame, but I've been tearing my hair out trying to figure out what it is. 
    Is it that once a form gets past ActionForm.validate, the form data 
will no longer be returned?  I tried setting the form scope to both 
session and request, to no avail.

Thanks again for any help.




>>
>>----------------------------------
>>     <action
>>         path="/user/add1"
>>         type="com.usbank.crm.user.UserAction"
>>         name="userForm"
>>         scope="session"
>>         validate="false"
>>         input="/user/user1.jsp"
>>         parameter="add">
>>       <forward name="continue"
>>path="/user/user1.jsp"/>
>>       <forward name="cancel"
>>path="/user/main.jsp"/>
>>     </action>
>>
>>     <action
>>         path="/user/edit1"
>>         type="com.usbank.crm.user.UserAction"
>>         name="userForm"
>>         scope="session"
>>         validate="false"
>>         input="/user/user1.jsp"
>>         parameter="select">
>>       <forward name="continue"
>>path="/user/user2.jsp"/>
>>       <forward name="cancel"
>>path="/user/main.jsp"/>
>>     </action>
>>
>>     <action
>>         path="/user/save1"
>>         type="com.usbank.crm.user.UserAction"
>>         name="userForm"
>>         scope="session"
>>         validate="true"
>>         input="/user/user1.jsp"
>>         parameter="continue">
>>       <forward name="continue"
>>path="/user/adduser2.jsp"/>
>>       <forward name="cancel"
>>path="/user/main.jsp"/>
>>     </action>
>>
>>------------------------
>>public class UserAction extends BaseAction {
>>
>>     protected ActionForward doAction(ActionMapping
>>mapping,
>>             ActionForm form, HttpServletRequest
>>request,
>>             HttpServletResponse response, String
>>action)
>>     {
>>         UserForm userForm = (UserForm)form;
>>
>>         // add user action - this is the initial
>>action when the user
>>         // enters the page to create a new user
>>         if ("add".equals(action)) {
>>             System.err.println("\n\n\n in add
>>action \n\n\n");
>>
>>             // populate the user type options
>>             userForm.setUserType(2);
>>
>>             return (new
>>ActionForward(mapping.getInput()));
>>         }
>>
>>         // select - this is to edit an existing
>>user
>>         if ("select".equals(action)) {
>>             System.err.println("\n\n\n in select
>>action \n\n\n");
>>
>>             // get the userid
>>
>>             // populate the form
>>
>>             return (new
>>ActionForward(mapping.getInput()));
>>         }
>>
>>         // the continue is used for both adds and
>>edits...it validates the
>>         // data and continues on to the next page
>>if successful.
>>         if ("continue".equals(action)) {
>>             System.err.println("\n\n\n in continue
>>action \n\n\n");
>>
>>             // validate the username isn't already
>>in use
>>             boolean alreadyExists = true;  // will
>>cause an ActionError
>>
>>             if (alreadyExists) {
>>                 ActionErrors errors = new
>>ActionErrors();
>>
>>                
>>errors.add(ActionErrors.GLOBAL_ERROR,
>>                            new 
>>ActionError("error.username.already.exists"));
>>
>>                 saveErrors(request, errors);
>>                 return
>>(mapping.findForward("user1add"));
>>             }
>>
>>             return
>>(mapping.findForward("continue"));
>>         }
>>-------------------------------------
>><html:form action="/user/save1" onsubmit="return
>>validateUserForm(this);">
>>
>>
>>--
>>To unsubscribe, e-mail:  
>><ma...@jakarta.apache.org>
>>For additional commands, e-mail:
>><ma...@jakarta.apache.org>
>>
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Send your FREE holiday greetings online!
> http://greetings.yahoo.com
> 
> --
> To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
> 
> 
> 



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: lost form data when validate returns errors

Posted by David Winterfeldt <dw...@yahoo.com>.
--- Dan Tanner <da...@dantanner.com> wrote:
> I'm having the problem of losing form data when my
> action class returns 
> errors.  The error displays properly, but I lose all
> the form data.
Maybe there is an issue with the reset method in your
ActionForm?  The validation error messages make sense?
 If they do then the data is being populated correctly
into your ActionForm from you form.

> 
> Looking at older posts, I've seen the same problem,
> but haven't seen a 
> fix or workaround yet.  I've included the relevant
> code snippets.
> 
> Also, I like the added features of the latest
> validation.jar, but it 
> forces me to use a newer version of struts than the
> 1.0 release because 
> of its ActionMessage usage.  Are the latest nightly
> builds fairly safe, 
> or would people recommend I stick with struts 1.0
> for production until a 
> new major release comes out?
I assume you mean the validator framework
(contrib/validator).  It doesn't use ActionMessage
from Struts.  The issues with using the newer version
of the Validator with Struts 1.0 are that the
Validator uses the commons packages for Bean Utils,
Collections, and the Digester.  I believe some people
have this working, but I haven't had time to try it.

David

> 
> Thanks in advance for any help.
> 
> ----------------------------------
>      <action
>          path="/user/add1"
>          type="com.usbank.crm.user.UserAction"
>          name="userForm"
>          scope="session"
>          validate="false"
>          input="/user/user1.jsp"
>          parameter="add">
>        <forward name="continue"
> path="/user/user1.jsp"/>
>        <forward name="cancel"
> path="/user/main.jsp"/>
>      </action>
> 
>      <action
>          path="/user/edit1"
>          type="com.usbank.crm.user.UserAction"
>          name="userForm"
>          scope="session"
>          validate="false"
>          input="/user/user1.jsp"
>          parameter="select">
>        <forward name="continue"
> path="/user/user2.jsp"/>
>        <forward name="cancel"
> path="/user/main.jsp"/>
>      </action>
> 
>      <action
>          path="/user/save1"
>          type="com.usbank.crm.user.UserAction"
>          name="userForm"
>          scope="session"
>          validate="true"
>          input="/user/user1.jsp"
>          parameter="continue">
>        <forward name="continue"
> path="/user/adduser2.jsp"/>
>        <forward name="cancel"
> path="/user/main.jsp"/>
>      </action>
> 
> ------------------------
> public class UserAction extends BaseAction {
> 
>      protected ActionForward doAction(ActionMapping
> mapping,
>              ActionForm form, HttpServletRequest
> request,
>              HttpServletResponse response, String
> action)
>      {
>          UserForm userForm = (UserForm)form;
> 
>          // add user action - this is the initial
> action when the user
>          // enters the page to create a new user
>          if ("add".equals(action)) {
>              System.err.println("\n\n\n in add
> action \n\n\n");
> 
>              // populate the user type options
>              userForm.setUserType(2);
> 
>              return (new
> ActionForward(mapping.getInput()));
>          }
> 
>          // select - this is to edit an existing
> user
>          if ("select".equals(action)) {
>              System.err.println("\n\n\n in select
> action \n\n\n");
> 
>              // get the userid
> 
>              // populate the form
> 
>              return (new
> ActionForward(mapping.getInput()));
>          }
> 
>          // the continue is used for both adds and
> edits...it validates the
>          // data and continues on to the next page
> if successful.
>          if ("continue".equals(action)) {
>              System.err.println("\n\n\n in continue
> action \n\n\n");
> 
>              // validate the username isn't already
> in use
>              boolean alreadyExists = true;  // will
> cause an ActionError
> 
>              if (alreadyExists) {
>                  ActionErrors errors = new
> ActionErrors();
> 
>                 
> errors.add(ActionErrors.GLOBAL_ERROR,
>                             new 
> ActionError("error.username.already.exists"));
> 
>                  saveErrors(request, errors);
>                  return
> (mapping.findForward("user1add"));
>              }
> 
>              return
> (mapping.findForward("continue"));
>          }
> -------------------------------------
> <html:form action="/user/save1" onsubmit="return
> validateUserForm(this);">
> 
> 
> --
> To unsubscribe, e-mail:  
> <ma...@jakarta.apache.org>
> For additional commands, e-mail:
> <ma...@jakarta.apache.org>
> 


__________________________________________________
Do You Yahoo!?
Send your FREE holiday greetings online!
http://greetings.yahoo.com

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>