Author Topic: Struts: problema con Framework Validator  (Read 2387 times)

juanper1

  • Newbie
  • *
  • Posts: 18
  • Karma: 0
    • View Profile
Struts: problema con Framework Validator
« on: Julio 11, 2007, 04:07:22 pm »
Buenas!

Estoy realizando validación con Struts Validator Framework y tengo un problema.

Tengo un formulario (hereda de "ValidatorForm") para el alta de usuarios cuyo nombre es "altaUsuarioForm", y su correspondiente página jsp es "alta.jsp". Necesito que la validación del formulario sea del lado del cliente, para lo cual he seguido los pasos que he leído en diferentes manuales, páginas, etc. Según estos, en "alta.jsp", dentro de la sección "head", he incluido la línea "<html:javascript formName="altaUsuarioForm"/>", y más adelante tengo la línea "<html:form action="/altaUsuario" method="POST" target="_self" onsubmit="return validateAltaUsuarioForm(this);">".  Hasta aquí todo lo necesario con respecto a la página jsp.

En validation.xml tengo:

   <form-validation>

      <global>
         <constant>
            <constant-name>descriptor</constant-name>
            <constant-value>^[0-9a-zA-Z]*$</constant-value>
         </constant>
      </global>
   
      <formset>
         <form name="altaUsuarioForm">
            <field property="idUsuario" depends="required, mask">
               <arg0 key="prompt.idUsuario"/>
                  <var>
                     <var-name>mask</var-name>
                     <var-value>${descriptor}</var-value>
           </var>
     </field>
            <field property="pwd" depends="required, mask">
               <arg0 key="prompt.pwd"/>
               <var>
                  <var-name>mask</var-name>
                  <var-value>${descriptor}</var-value>
               </var>
            </field>
            <field property="confPwd" depends="required, mask">
               <arg0 key="prompt.confPwd"/>
               <var>
                  <var-name>mask</var-name>
                  <var-value>${descriptor}</var-value>
               </var>
            </field>
            <field property="pregSecr" depends="required">
                <arg0 key="prompt.pregSecr"/>
            </field>
            <field property="respSecr" depends="required">
                <arg0 key="prompt.respSecr"/>
            </field>
        </form>
    </formset>

</form-validation>

 

El código javascript para la validación del lado del cliente, al ser validaciones comunes ya incluidas con el framework, lo incluyo en validator-rules.xml con la etiqueta "jsFunction", es decir,

   <validator name="required"
         classname="org.apache.struts.validator.FieldChecks"
            method="validateRequired"
      methodParams="java.lang.Object,
                    org.apache.commons.validator.ValidatorAction,
                    org.apache.commons.validator.Field,
                    org.apache.struts.action.ActionMessages,
                    org.apache.commons.validator.Validator,
                    javax.servlet.http.HttpServletRequest"
               msg="errors.required"
       jsFunction="org.apache.commons.validator.javascript.validateRequired"/>

   <validator name="mask"
         classname="org.apache.struts.validator.FieldChecks"
            method="validateMask"
      methodParams="java.lang.Object,
                    org.apache.commons.validator.ValidatorAction,
                    org.apache.commons.validator.Field,
                    org.apache.struts.action.ActionMessages,
                    org.apache.commons.validator.Validator,
                    javax.servlet.http.HttpServletRequest"
           depends=""
               msg="errors.invalid"
       jsFunction="org.apache.commons.validator.javascript.validateMask"/>

Lo cierto es que la ejecución es la misma incluya "jsFunction" o no, pero he querido probar con ambos casos. Dicha ejecución es mi problema, y es la siguiente:

Mientras uno de los 5 campos no esté relleno, me sale el correspondiente mensaje tipo Windows con su botón de Aceptar
diciéndome, por ejemplo, "identificador usuario es un campo obligatorio". Hasta ahí bien, aunque quiero señalar que no se muestra ningún otro tipo de error de validación mientras "validateRequired" no se cumpla para los 5 campos, lo cual no me será interesante más adelante, pero bueno.
Estando los 5 campos rellenos, si "idUsuario" no cumple con mi máscara descrita, de nuevo la validación es del lado cliente
con el mensaje tipo Windows, pero si lo introduzco correctamente y cualquiera de los otros 2 campos lo hago de forma incorrecta (pwd y/o confPwd), entonces la validación se produce del lado del servidor!!, ya que me salen los mensajes de error en la página jsp a través del "<html:errors>" que figura en "alta.jsp".

No tengo ni idea de por qué, ni le encuentro ninguna lógica al permitirme validar del lado del cliente un campo sí (idUsuario) y otros no (pwd y confPwd) con la misma regla de validación. Estoy usando para el desarrollo Netbeans 5.5 y su Struts 1.2.9, y los campos anteriores se corresponden con un identificador de usuario, la contraseña, y su confirmación. He leído que, para el caso de validar la existencia de un mínimo y un máximo de caracteres, lo cual me interesa también, no es aconsejable hacerlo con contraseñas, pero sólo es una recomendación que no tiene por qué suponer un error y aplicable a la página de login, lo cual no es mi caso.

Agradecería cualquier ayuda, de verdad!

Gracias!

 

ey