You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by dw...@apache.org on 2001/07/09 05:15:15 UTC

cvs commit: jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc ApplicationResources.properties ApplicationResources_fr.properties MultiRegistrationForm.java RegistrationAction.java RegistrationForm.java TypeAction.java TypeForm.java

dwinterfeldt    01/07/08 20:15:15

  Added:       contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc
                        ApplicationResources.properties
                        ApplicationResources_fr.properties
                        MultiRegistrationForm.java RegistrationAction.java
                        RegistrationForm.java TypeAction.java TypeForm.java
  Log:
  Adding Struts Validator.
  
  Revision  Changes    Path
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/ApplicationResources.properties
  
  Index: ApplicationResources.properties
  ===================================================================
  # Buttons/Links
  button.cancel=Cancel
  button.confirm=Confirm
  button.reset=Reset
  button.save=Save
  button.search=Search
  button.edit=Edit
  button.delete=Delete
  button.report=Report
  button.add=Add
  button.move=Move
  
  # Errors
  error.system=System error, please try again.
  errors.footer=
  errors.header=<h3><font color="red">Validation Error</font></h3>You must correct the following error(s) before proceeding:
  errors.ioException=I/O exception rendering error messages: {0}
  error.database.missing=<li>User database is missing, cannot validate logon credentials</li>
  errors.required={0} is required.
  errors.invalid={0} is invalid.
  
  errors.byte={0} must be an byte.
  errors.short={0} must be an short.
  errors.integer={0} must be an integer.
  errors.long={0} must be an long.
  errors.float={0} must be an float.
  errors.double={0} must be an double.
  
  errors.date={0} is not a date.
  
  errors.range={0} is not in the range {1} through {2}.
  
  
  # Application Level Messages
  app.home=Home
  app.logoff=Log off
  app.logon=Log on
  app.search.name=Name
  app.search.noresults=No results were found for your search.
  app.insert.duplicateonunique={0} already exists.
  app.update.duplicateonunique={0} already exists.
  app.delete={0} has been deleted.
  
  
  # Registration Form                                     
  registrationForm.title=Registration
  registrationForm.title.create=Register
  #registrationForm.title.edit=Edit User Information
  registrationForm.title.search=Registration Search
  registrationForm.firstname.displayname=First Name
  registrationForm.lastname.displayname=Last Name
  registrationForm.addr.displayname=Address
  registrationForm.city.displayname=City
  registrationForm.stateprov.displayname=State
  registrationForm.zippostal.displayname=Zip
  registrationForm.phone.displayname=Phone
  registrationForm.email.displayname=E-mail
  registrationForm.lastname.maskmsg=Last Name can only be letters and numbers, no spaces.
  
  # Javascript Registration Form                                     
  jsRegistrationForm.title=Javascript Registration
  jsRegistrationForm.title.search=Javascript Registration Search
  
  # Multi-Part Javascript Registration Form                                     
  multiRegistrationForm.title=Multi-Part Javascript Registration
  multiRegistrationForm.title.search=Multi-Part Javascript Registration Search
  
  
  # Type form
  typeForm.title=Type Form
  typeForm.title.create=Type Form
  typeForm.byte.displayname=Byte Field
  typeForm.short.displayname=Short Field
  typeForm.integer.displayname=Integer Field
  typeForm.long.displayname=Long Field
  typeForm.float.displayname=Float Field
  typeForm.double.displayname=Double Field
  typeForm.date.displayname=Date Field
  
  #Language
  changeLanguage.change=Change Language to:
  changeLanguage.english=English
  changeLanguage.french=French
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/ApplicationResources_fr.properties
  
  Index: ApplicationResources_fr.properties
  ===================================================================
  button.cancel=Annulent
  button.confirm=Confirment
  button.reset=Remettent
  button.save=�conomiser
  button.search=Recherche
  button.edit=�ditent
  button.delete=Effacement
  button.report=�tat
  button.add=Ajoutent
  button.move=Se d�placent
  
  
  # Errors
  error.system=L'erreur syst�me, essayent s'il vous pla�t encore.
  errors.footer=
  errors.header=<h3><font color="red">Erreur De Validation</font></h3>Vous devez corriger l'error(s) suivant avant proc�dant:
  errors.ioException=Exception de E/S rendant des messages d'erreur: {0}
  error.database.missing=<li>La base de données d'utilisateur est manquante, ne peut pas valider des qualifications de procédure de connexion </li>
  errors.required={0} est exig�.
  errors.invalid={0} est incorrect.
  
  errors.byte=Le {0} doit �tre un nombre byte.
  errors.short=Le {0} doit �tre un nombre short.
  errors.integer=Le {0} doit �tre un nombre integer.
  errors.long=Le {0} doit �tre un nombre long.
  errors.float=Le {0} doit �tre un nombre float.
  errors.double=Le {0} doit �tre un nombre double.
  
  errors.date=Le {0} n'est pas une date.
  
  errors.range=Le {0} n'est pas dans l'intervalle {1} � {2}
  
  
  
  # Application Level Messages
  app.home=� la maison
  app.logoff=Fermeture de session
  app.logon=Entrent
  app.search.name=Nom
  app.search.noresults=Aucun r�sultat n'a �t� trouv� pour votre recherche.
  app.insert.duplicateonunique=Le {0} existe d�j�.
  app.update.duplicateonunique=Le {0} existe d�j�.
  app.delete=Le {0} a �t� effac�.
  
  
  # Registration Form                                     
  registrationForm.title=Enregistrement
  registrationForm.title.create=Registre
  registrationForm.title.edit=�ditez L'Information D'Utilisateur
  registrationForm.title.search=Recherche D'Enregistrement
  registrationForm.firstname.displayname=Pr�nom
  registrationForm.lastname.displayname=Dernier Nom
  registrationForm.addr.displayname=Adresse
  registrationForm.city.displayname=Ville
  registrationForm.stateprov.displayname=�tat/Province
  registrationForm.zippostal.displayname=Code postal
  registrationForm.phone.displayname=T�l�phone
  registrationForm.email.displayname=E-mail
  registrationForm.lastname.maskmsg=Le dernier nom peut seulement être des lettres et des nombres, aucuns espaces.
  
  # Javascript Registration Form                                     
  jsRegistrationForm.title=Enregistrement De Javascript
  jsRegistrationForm.title.search=Recherche D'Enregistrement De Javascript
  
  # Multi-Part Javascript Registration Form                                     
  multiRegistrationForm.title=Enregistrement De liasse multiple De Javascript
  multiRegistrationForm.title.search=Recherche De liasse multiple D'Enregistrement De Javascript
  
  
  # Type form
  typeForm.title=Type Form
  typeForm.title.create=Type Form
  typeForm.byte.displayname=Byte Field
  typeForm.short.displayname=Short Field
  typeForm.integer.displayname=Integer Field
  typeForm.long.displayname=Long Field
  typeForm.float.displayname=Float Field
  typeForm.double.displayname=Double Field
  typeForm.date.displayname=Date Field
  
  #Language
  changeLanguage.change=Changez le langage en:
  changeLanguage.english=Les anglais
  changeLanguage.french=Les fran�ais
  
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/MultiRegistrationForm.java
  
  Index: MultiRegistrationForm.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  package com.wintecinc.struts.example.validator.jdbc;
  
  import java.io.Serializable;
  import javax.servlet.http.HttpServletRequest;
  import org.apache.struts.action.ActionMapping;
  
  
  /**
   * Form bean for the user registration page.
   *
   * @author David Wintefeldt
  */
  public class MultiRegistrationForm extends RegistrationForm implements Serializable {
          
      /**
       * Method is overridden so values are not lost since the bean 
       * is in session scope.
       *
       * @param mapping The mapping used to select this instance
       * @param request The servlet request we are processing
       */
      public void reset(ActionMapping mapping, HttpServletRequest request) {
  
      }
  
  }
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/RegistrationAction.java
  
  Index: RegistrationAction.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  package com.wintecinc.struts.example.validator.jdbc;
  
  import java.util.List;
  import java.util.ArrayList;
  import java.sql.Connection;
  import java.sql.PreparedStatement;
  import java.sql.ResultSet;
  import java.sql.Statement;
  import javax.servlet.http.HttpServletRequest;
  import org.apache.struts.action.ActionError;
  import org.apache.struts.action.ActionErrors;
  import com.wintecinc.struts.action.ActionMessage;
  import com.wintecinc.struts.action.ActionMessages;
  import com.wintecinc.struts.action.GenericAction;
  import com.wintecinc.struts.action.GenericForm;
  
  
  /**
   * Implementation of <strong>Action</strong> that validates a registration form.
   *
   * @author David Wintefeldt
  */
  public class RegistrationAction extends GenericAction {
  
      /**
       * Inserts a row into the table associated with this Action.
       *
       * @param		request		<code>HttpServletRequest</code> associated with this action.
       * @param		form		<code>GenericForm</code> associated with this action.
      */  
      protected void insert(HttpServletRequest request, GenericForm form) throws Exception {
      	RegistrationForm info = (RegistrationForm)form;
          Connection con = null;
          PreparedStatement pstmt = null;     
          Statement stmt = null;        
          ResultSet rs = null;           
          
          try {
              // Need a logged in user.
              String sUserName = ""; //request.getUserPrincipal().getName();
              con = getConnection();
              con.setAutoCommit(false);
  
              stmt = con.createStatement();
             
              rs = stmt.executeQuery("SELECT ID FROM REGISTRATION where UPPER(LAST_NAME)='" + info.getLastName().toUpperCase() + "'");
              
              if (rs.next()) {
  	       ActionErrors errors = new ActionErrors();
  	       String name = info.getLastName() + " " + info.getLastName();
                 errors.add("lastName", new ActionError("app.insert.duplicateonunique", name));	
  
                 saveErrors(request, errors);
                 throw new DuplicateNameException(name + " already exists.");
              }            
              
              String sQuery = "INSERT INTO REGISTRATION (ID, FIRST_NAME, LAST_NAME, ADDR, CITY, STATE_PROV, ZIP_POSTAL, PHONE, EMAIL, " +
                                                       " B_ACTIVE, DATE_CREATED, DATE_MODIFIED, USER_NAME) " +
                                                       " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
              
              pstmt = con.prepareStatement(sQuery);
  
  	    pstmt.setInt(1, getNextKey(con, "REGISTRATION", "ID"));
              pstmt.setString(2, info.getFirstName());
  	    pstmt.setString(3, info.getLastName());
  	    pstmt.setString(4, info.getAddr());
  	    pstmt.setString(5, info.getCity());
  	    pstmt.setString(6, info.getStateProv());
  	    pstmt.setString(7, info.getZipPostal());
  	    pstmt.setString(8, info.getPhone());
  	    pstmt.setString(9, info.getEmail());
  	    pstmt.setBoolean(10, true);
  	    pstmt.setTimestamp(11, new java.sql.Timestamp(new java.util.Date().getTime())); 
  	    pstmt.setTimestamp(12, new java.sql.Timestamp(new java.util.Date().getTime())); 
  	    pstmt.setString(13, sUserName);
  	    
  	    pstmt.execute();
  	    
  	    con.commit();
          } catch (Exception e) {
             if (con != null)
                try { con.rollback(); } catch (Exception ex) {}
             log("RegistrationAction::insert() - " + e.getMessage(), e);
             throw e;
          } finally {
             if (rs != null)
                try { rs.close(); } catch (Exception e) {}
             if (stmt != null)
                try { stmt.close(); } catch (Exception e) {}
             if (pstmt != null)
                try { pstmt.close(); } catch (Exception e) {}
             if (con != null)
                try { con.close(); } catch (Exception e) {}
          }
      }
  
      /**
       * Updates a row into the table associated with this Action.
       *
       * @param		request		<code>HttpServletRequest</code> associated with this action.
       * @param		form		<code>GenericForm</code> associated with this action.
      */
      protected void update(HttpServletRequest request, GenericForm form) throws Exception {
      	RegistrationForm info = (RegistrationForm)form;
          Connection con = null;
  	PreparedStatement pstmt = null;
  	
          try {
              // Need a logged in user.
  	    String sUserName = ""; //request.getUserPrincipal().getName();
  	    
              con = getConnection();
              String sQuery = "UPDATE REGISTRATION SET FIRST_NAME = ?, " +
                                                     " LAST_NAME = ?,       " +
                                                     " ADDR = ?," +
                                                     " CITY = ?," +
                                                     " STATE_PROV = ?," +
                                                     " ZIP_POSTAL = ?," +
                                                     " PHONE = ?," +
                                                     " EMAIL = ?," +
                                                     //" B_ACTIVE = ?," +
                                                     " DATE_MODIFIED = ?," +
                                                     " USER_NAME = ? " + 
                                                     " WHERE ID = ?";
  
              pstmt = con.prepareStatement(sQuery);
  
              pstmt.setString(1, info.getFirstName());
              pstmt.setString(2, info.getLastName());
              pstmt.setString(3, info.getAddr());
              pstmt.setString(4, info.getCity());
              pstmt.setString(5, info.getStateProv());
              pstmt.setString(6, info.getZipPostal());
              pstmt.setString(7, info.getPhone());
              pstmt.setString(8, info.getEmail());
  	    pstmt.setTimestamp(9, new java.sql.Timestamp(new java.util.Date().getTime())); 
  	    pstmt.setString(10, sUserName);
  	    pstmt.setInt(11, getKey(info.getId()));
  
  	    pstmt.execute();
  	    
  	    con.commit();
          } catch (Exception e) {
            log("RegistrationAction::update() - " + e.getMessage(), e);
            throw e;
          } finally {
             if (pstmt != null)
                try { pstmt.close(); } catch (Exception e) {}
             if (con != null)
                try { con.close(); } catch (Exception e) {}
          }
      }
  
      /**
       * Gets a record from the table associated with this Action and returns 
       * it in a <code>GenericForm</code> object.
       *
       * @param		request		<code>HttpServletRequest</code> associated with this action.
      */    
      protected GenericForm getInfo(HttpServletRequest request, GenericForm form) {
          Connection con = null;
          Statement stmt = null;
          ResultSet rs = null;
          
          RegistrationForm info = new RegistrationForm();
  
          try {
             con = getConnection();
             stmt = con.createStatement();
             
             rs = stmt.executeQuery("SELECT ID, FIRST_NAME, LAST_NAME, ADDR, CITY, STATE_PROV, ZIP_POSTAL, " +
                                    " PHONE, EMAIL FROM REGISTRATION where ID=" + getKey(request));
  
              if (rs.next()) {
                  info.setId(rs.getString("ID"));
                  info.setFirstName(rs.getString("FIRST_NAME"));
                  info.setLastName(rs.getString("LAST_NAME"));
                  info.setAddr(rs.getString("ADDR"));
                  info.setCity(rs.getString("CITY"));
                  info.setStateProv(rs.getString("STATE_PROV"));
                  info.setZipPostal(rs.getString("ZIP_POSTAL"));
                  info.setPhone(rs.getString("PHONE"));
                  info.setEmail(rs.getString("EMAIL"));
              }
              
              // ODBC sticks extra spaces to fill up the field so I remove them 
              // Shouldn't happen if you have a direct driver to MySQL, Oracle, MS SQL*SERVER
              info.setId((info.getId() != null ? info.getId().trim() : ""));
              info.setFirstName((info.getFirstName() != null ? info.getFirstName().trim() : ""));
              info.setLastName((info.getLastName() != null ? info.getLastName().trim() : ""));
              info.setAddr((info.getAddr() != null ? info.getAddr().trim() : ""));
              info.setCity((info.getCity() != null ? info.getCity().trim() : ""));
              info.setStateProv((info.getStateProv() != null ? info.getStateProv().trim() : ""));
              info.setZipPostal((info.getZipPostal() != null ? info.getZipPostal().trim() : ""));
              info.setPhone((info.getPhone() != null ? info.getPhone().trim() : ""));
              info.setEmail((info.getEmail() != null ? info.getEmail().trim() : ""));
  
          } catch (Exception e) {
            log("RegistrationAction::getInfo() - " + e.getMessage(), e);
          } finally {
             if (rs != null)
                try { rs.close(); } catch (Exception e) {}
             if (stmt != null)
                try { stmt.close(); } catch (Exception e) {}
             if (con != null)
                try { con.close(); } catch (Exception e) {}
          }
          return info;
      }
  
      /**
       * Deletes a record.
       *
       * @param		request		<code>HttpServletRequest</code> associated with this action.
       * @param		form		<code>GenericForm</code> associated with this action.
      */
      protected void delete(HttpServletRequest request, GenericForm form) throws Exception {
      	RegistrationForm info = (RegistrationForm)form;
          Connection con = null;
          PreparedStatement pstmt = null;
  
          try {
             con = getConnection();
             String sQuery = "DELETE REGISTRATION WHERE ID=?";
             
             pstmt = con.prepareStatement(sQuery);
  
  	   pstmt.setInt(1, getKey(info.getId()));
  
  	   pstmt.execute();
  	   
  	   String name = info.getFirstName() + " " + info.getLastName();
  	   
  	   ActionMessages messages = new ActionMessages();
  	   messages.add(new ActionMessage("app.delete", name));	
  	   saveMessages(request, messages);
  	   
  	   con.commit();
          } catch (Exception e) {
            log("RegistrationAction::delete() - " + e.getMessage(), e);
            throw e;
          } finally {
             if (pstmt != null)
                try { pstmt.close(); } catch (Exception e) {}
             if (con != null)
                try { con.close(); } catch (Exception e) {}
          }
      }
  
      /**
       * Searches the table associated with this Action.
       *
       * @param		request		<code>HttpServletRequest</code> associated with this action.
      */
      protected void search(HttpServletRequest request, GenericForm form) throws Exception {
          Connection con = null;
          Statement stmt = null;
  	ResultSet rs = null;
  	
  	List lResults = new ArrayList();
  	RegistrationForm paramInfo = (RegistrationForm)form;
  	
          String sQuery = "SELECT ID, FIRST_NAME, LAST_NAME, PHONE, EMAIL FROM REGISTRATION ORDER BY LAST_NAME";
          
          if (paramInfo != null && paramInfo.getLastName() != null && paramInfo.getLastName().trim().length() > 0)
             sQuery = "SELECT ID, FIRST_NAME, LAST_NAME, PHONE, EMAIL FROM REGISTRATION WHERE UPPER(LAST_NAME) LIKE '" + paramInfo.getLastName().toUpperCase() + "%' ORDER BY LAST_NAME";
             
          try {
             con = getConnection();
  	   stmt = con.createStatement();
             rs = stmt.executeQuery(sQuery);
  
  	   while (rs.next()) {
                RegistrationForm info = new RegistrationForm();
  
                info.setId(rs.getString("ID"));
                info.setFirstName(rs.getString("FIRST_NAME"));
                info.setLastName(rs.getString("LAST_NAME"));
                info.setPhone(rs.getString("PHONE"));
                info.setEmail(rs.getString("EMAIL"));
                lResults.add(info);
  	   }
  
  	   saveSearchResults(request, lResults);
          } catch (Exception e) {
            log("RegistrationAction::search() - " + e.getMessage(), e);
            throw e;
          } finally {
             if (rs != null)
                try { rs.close(); } catch (Exception e) {}
             if (stmt != null)
                try { stmt.close(); } catch (Exception e) {}
             if (con != null)
                try { con.close(); } catch (Exception e) {}
          }
      }
  
      /**
       * Retrieves key from the <code>HttpServletRequest</code>.
      */    
      private int getKey(HttpServletRequest request) {
         return getKey(request.getParameter("id"));
      }
  
      /**
       * Retrieves key from a <code>String</code>.
      */    
      private int getKey(String sKey) {
         int iKey = 0;
         try { 
            iKey = Integer.parseInt(sKey);
         } catch (Exception e) { }    	
         
         return iKey;
      }
  
  }
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/RegistrationForm.java
  
  Index: RegistrationForm.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  package com.wintecinc.struts.example.validator.jdbc;
  
  import java.io.Serializable;
  import javax.servlet.http.HttpServletRequest;
  import org.apache.struts.action.ActionMapping;
  import com.wintecinc.struts.action.GenericForm;
  
  
  /**
   * Form bean for the user registration page.
   *
   * @author David Wintefeldt
  */
  public class RegistrationForm extends GenericForm implements Serializable {
      protected String id = null;       
      protected String sFirstName = null;
      protected String sLastName = null;
      protected String sAddr = null;
      protected String sCity = null;
      protected String sStateProv = null;
      protected String sZipPostal = null;
      protected String sPhone = null;
      protected String sEmail = null;
  
  
      /**
       * Return the id.
      */
      public String getId() {
  	return id;
      }
  
      /**
       * Sets the id.
      */
      public void setId(String id) {
  	this.id = id;
      }
  
      public String getFirstName() {
         return sFirstName;	
      }
      
      public void setFirstName(String sFirstName) {
         	this.sFirstName = sFirstName;
      }
      
      public String getLastName() {
         return sLastName;	
      }
      
      public void setLastName(String sLastName) {
         	this.sLastName = sLastName;
      }
  
      public String getAddr() {
         return sAddr;	
      }
      
      public void setAddr(String sAddr) {
         	this.sAddr = sAddr;
      }
  
      public String getCity() {
         return sCity;	
      }
      
      public void setCity(String sCity) {
         	this.sCity = sCity;
      }
  
      public String getStateProv() {
         return sStateProv;	
      }
      
      public void setStateProv(String sStateProv) {
         	this.sStateProv = sStateProv;
      }
  
      public String getZipPostal() {
         return sZipPostal;	
      }
      
      public void setZipPostal(String sZipPostal) {
         	this.sZipPostal = sZipPostal;
      }
  
      public String getPhone() {
         return sPhone;	
      }
      
      public void setPhone(String sPhone) {
         	this.sPhone = sPhone;
      }
  
      public String getEmail() {
         return sEmail;	
      }
      
      public void setEmail(String sEmail) {
         	this.sEmail = sEmail;
      }
          
      /**
       * Reset all properties to their default values.
       *
       * @param mapping The mapping used to select this instance
       * @param request The servlet request we are processing
       */
      public void reset(ActionMapping mapping, HttpServletRequest request) {
         super.reset(mapping, request);
         
         id = null;
         sFirstName = null;
         sLastName = null;
         sAddr = null;
         sCity = null;
         sStateProv = null;
         sZipPostal = null;
         sPhone = null;
         sEmail = null;
      }
  
  }
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/TypeAction.java
  
  Index: TypeAction.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  package com.wintecinc.struts.example.validator.jdbc;
  
  import java.io.IOException;
  import java.util.Locale;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpSession;
  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.util.MessageResources;
  
  
  /**
   * Implementation of <strong>Action</strong> that validates a different 'types'.
   *
   * @author David Wintefeldt
  */
  public final class TypeAction extends Action {
  
  
      /**
       * Process the specified HTTP request, and create the corresponding HTTP
       * response (or forward to another web component that will create it).
       * Return an <code>ActionForward</code> instance describing where and how
       * control should be forwarded, or <code>null</code> if the response has
       * already been completed.
       *
       * @param mapping The ActionMapping used to select this instance
       * @param actionForm The optional ActionForm bean for this request (if any)
       * @param request The HTTP request we are processing
       * @param response The HTTP response we are creating
       *
       * @exception IOException if an input/output error occurs
       * @exception ServletException if a servlet exception occurs
       */
      public ActionForward perform(ActionMapping mapping,
  				 ActionForm form,
  				 HttpServletRequest request,
  				 HttpServletResponse response)
  	throws IOException, ServletException {
  
  	// Extract attributes we will need
  	HttpSession session = request.getSession();
  	Locale locale = getLocale(request);
  	MessageResources messages = getResources();
  	TypeForm info = (TypeForm)form;
  	String action = request.getParameter("action");
  	
  	// Was this transaction cancelled?
  	if (isCancelled(request)) {
  	    log(" " + mapping.getAttribute() + " - Type transaction was cancelled");
  	    
  	    removeFormBean(mapping, request);
  
  	    return (mapping.findForward("success"));
  	}
  
  	return mapping.findForward("success");	
      }
  
      /**
       * Convenience method that call the comparable servlet log method and writes 
       * an explanatory message and a stack trace for a given Throwable exception to the 
       * servlet log file.
       *
       * @param 	message		String that describes the error or exception
      */
      protected void log(String message) {
         if (servlet.getDebug() >= 1)
             servlet.log(message);
      }
      
      /**
       * Convenience method that call the comparable servlet log method and writes 
       * an explanatory message and a stack trace for a given Throwable exception to the 
       * servlet log file.
       *
       * @param 	message		String that describes the error or exception
       * @param 	throwable	Throwable error or exception
      */
      protected void log(String message, Throwable throwable) {
         if (servlet.getDebug() >= 1)
             servlet.log(message, throwable);
      }
  
      /**
       * Convenience method for removing the obsolete form bean.
       *
       * @param mapping The ActionMapping used to select this instance
       * @param request The HTTP request we are processing
      */    
      protected void removeFormBean(ActionMapping mapping, HttpServletRequest request) {
         // Remove the obsolete form bean
         if (mapping.getAttribute() != null) {
             if ("request".equals(mapping.getScope())) {
                 request.removeAttribute(mapping.getAttribute());
             } else {
                HttpSession session = request.getSession();
                session.removeAttribute(mapping.getAttribute());
             }
         }
      }
  }
  
  
  
  1.1                  jakarta-struts/contrib/validator/src/jdbc-example/com/wintecinc/struts/example/validator/jdbc/TypeForm.java
  
  Index: TypeForm.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Struts", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  
  package com.wintecinc.struts.example.validator.jdbc;
  
  import java.io.Serializable;
  import javax.servlet.http.HttpServletRequest;
  import org.apache.struts.action.ActionMapping;
  import com.wintecinc.struts.action.ValidatorForm;
  
  
  /**
   * Form bean for the user type page.
   *
   * @author David Wintefeldt
  */
  public final class TypeForm extends ValidatorForm implements Serializable {
      private String action = null;
         
      private String sByte = null;
      private String sShort = null;
      private String sInteger = null;
      private String sLong = null;
      private String sFloat = null;
      private String sDouble = null;
      private String sDate = null;
  
      public String getAction() {
  	return action;
      }
  
      public void setAction(String action) {
          this.action = action;
      }
  
      public String getByte() {
         return sByte;	
      }
      
      public void setByte(String sByte) {
         	this.sByte = sByte;
      }
      
      public String getShort() {
         return sShort;	
      }
      
      public void setShort(String sShort) {
         	this.sShort = sShort;
      }
  
      public String getInteger() {
         return sInteger;	
      }
      
      public void setInteger(String sInteger) {
         	this.sInteger = sInteger;
      }
  
      public String getLong() {
         return sLong;	
      }
      
      public void setLong(String sLong) {
         	this.sLong = sLong;
      }
  
      public String getFloat() {
         return sFloat;	
      }
      
      public void setFloat(String sFloat) {
         	this.sFloat = sFloat;
      }
  
      public String getDouble() {
         return sDouble;	
      }
      
      public void setDouble(String sDouble) {
         	this.sDouble = sDouble;
      }
  
      public String getDate() {
         return sDate;	
      }
      
      public void setDate(String sDate) {
         	this.sDate = sDate;
      }
          
      /**
       * Reset all properties to their default values.
       *
       * @param mapping The mapping used to select this instance
       * @param request The servlet request we are processing
       */
      public void reset(ActionMapping mapping, HttpServletRequest request) {
         action = null;
         sByte = null;
         sShort = null;
         sInteger = null;
         sLong = null;
         sFloat = null;
         sDouble = null;
         sDate = null;
      }
  
  }