Anda di halaman 1dari 6

Tutorial del framework de validacin de struts

Introduccin
Es una decisin de diseo implementar todos los forms dinmicos., sin embargo, la clase DynaActionForm no provee un comportamiento por defecto para el mtodo validate( . As! pues "ay dos opciones para validar un form, se crea una subclase de DynaActionForm donde se implemente un validate( propio (#ue no es recomendado o se usa el frame$or% de validacin (la opcin recomendada . En struts &.' no "ab!a frame$or% de validacin, simplemente se implementaba el mtodo validate( en cada ActionForm. Esto generaba ( inconvenientes) primero se replicaba cdigo de validaciones similares en cada ActionForm y segundo, cada modificacin a la validacin implicaba modificar el cdigo fuente y recompilar. El frame$or% de validacin de la versin &.& resuelve estos problemas "aciendo de la lgica de validacin un !tem configurable. El frame$or% es originado de un proyecto open source de *a%arta. El propsito de ste es proveer validacin declarativa de los campos de una forma. +a validacin incluye tipos bsicos, formatos (por defecto y definidos por medio de e,presiones regulares , rangos y longitud de los campos. +as reglas de validacin son las funciones lgicas de validacin asociadas a campos espec!ficos de la forma. +as reglas bsicas de validacin vienen establecidas en las versin &.& de -truts. .or e/emplo, 0re#uired1, 0min+engt"1, 0ma,+engt"1, etc. Estas reglas bsicas permiten "acer validacin al lado del cliente por medio de /avascript. Es posible crear reglas de validacin propias y aadirlas al arc"ivo de definiciones.

Configuracin y uso
1. Configurar el plugin validator
&.&. Aada el siguiente elemento 2plug3in4 sin ning5n cambio al arc"ivo struts3 config.,ml
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/W !-IN"/validator-rules.#ml$ /W !-IN"/validation.#ml"/> </plug-in>

6ote #ue el tag 2plug3in4 es de -truts &.&, como no estaba en el D7D de -truts &.' es necesario actuali8ar el D7D al #ue "ace referencia el struts3config.,ml. .ara ello copie la siguiente informacin)
< %&'()*P 1.1// N" struts-con+ig P,!-I( "-//.pache /o+t0are "oundation//&)& /truts (on+iguration "http2//3a4arta.apache.org/struts/dtds/struts-con+ig5151.dtd">

2. Configurar el archivo validation.xml (y tal vez el validation rules.xml!


(.&. El arc"ivo validation3rules.,ml contiene el con/unto global de las reglas de validacin. +o provee -truts &.&. ste arc"ivo debe estar ubicado en el directorio 9E:3;6F de la aplicacin. +as reglas bsicas de validacin son) + re#uired 3 cuando el campo es re#uerido. + re#uired;f 3 cuando el campo es re#uerido dependiendo del contenido de otro campo. + minlengt" 3 cuando el campo no puede tener menos de , caracteres de longitud. + ma,lengt" 3 cuando el campo no puede tener ms de , caracteres de longitud. + mas% 3 cuando el campo debe tener un formato espec!fico definido por una e,presin regular. + byte 3 cuando al campo se le debe poder "acer cast a byte. + s"ort 3 cuando al campo se le debe poder "acer cast a s"ort. + integer 3 cuando al campo se le debe poder "acer cast a integer. + long 3 cuando al campo se le debe poder "acer cast a long. + float 3 cuando al campo se le debe poder "acer cast a float. + double 3 cuando al campo se le debe poder "acer cast a double. + date 3 cuando al campo se le debe poder "acer cast a date. + int<ange 3 cuando el campo debe estar en un rango entre , ,y, y. + float<ange 3 cuando el campo debe estar en un rango entre , ,y, y. + creditcard 3 cuando el campo debe contener un n5mero vlido de tar/eta de crdito. + email 3 cuando el campo debe contener una direccin de email vlida. =ensa/es de error #ue vienen con el frame$or% El validator frame$or% tiene definido un con/unto de mensa/es de error #ue se pueden usar en su aplicacin. Estos mensa/es se deben copiar al resource bundle de su aplicacin. errors.re#uired>?'@ is re#uired. errors.minlengt">?'@ cannot be less t"an ?&@ c"aracters. errors.ma,lengt">?'@ cannot be greater t"an ?(@ c"aracters. errors.invalid>?'@ is invalid.

errors.byte>?'@ must be an byte. errors.s"ort>?'@ must be an s"ort. errors.integer>?'@ must be an integer. errors.long>?'@ must be an long. errors.float>?'@ must be an float. errors.double>?'@ must be an double. errors.date>?'@ is not a date. errors.range>?'@ is not in t"e range ?&@ t"roug" ?(@. errors.creditcard>?'@ is not a valid credit card number. errors.email>?'@ is an invalid e3mail address. 6ote #ue ?'@, ?&@, ?(@ indican donde se ubicarn los parmetros enviados al mensa/e de error. Estos parmetros son especificados con los elementos 2arg'4, 2arg&4 y 2arg(4 del arc"ivo validation.,ml. Asted puede escribir sus propias reglas de validacin aadindolas a este arc"ivo o crendolas en otro arc"ivo y aadiendo otro arc"ivo al tag 2plug3in4 E/emplo de reglas de validacin) <egla de validacin de 0minlengt"1 obtenida del arc"ivo validation3rules.,ml)
<validator name="minlength" classname="org.apache.struts.validator."ield(hec4s" method="validate6in-ength" methodParams="3ava.lang.'73ect$ org.apache.commons.validator.Validator.ction$ org.apache.commons.validator."ield$ org.apache.struts.action..ction rrors$ 3ava#.servlet.http.8ttp/ervlet9e:uest" depends="" msg="errors.minlength"> <3avascript><%;(&.).; +unction validate6in-ength<+orm= > var isValid = true? var +ocus"ield = null? ... </3avascript> </validator>

+os atributos del elemento 2validator ...4 son) name) nombre lgico para la regla de validacin. Es el nombre usado en el validation.,ml classname, met"od) clase y mtodo #ue contienen la lgica de la validacin met"od.arams) lista de parmetros del mtodo delimitada por comas msg) llave en el resource bundle. El validator lo usa para buscar un mensa/e del resource bundle de struts. depends) otras reglas de validacin #ue se deben llamar antes de e/ecutar sta regla.

(.(. El arc"ivo validation.,ml es especifico a la aplicacin pues es donde el desarrollador especifica #ue reglas del validation3rules.,ml se van a usar para cada ActionForm. -i el arc"ivo no e,iste creelo en el directorio 9E:3;6F de su proyecto. E/emplo de validation.,ml (Aser+oginForm
<+orm-validation> <+ormset> <+orm name=" ,ser-ogin"orm"> <+ield property="username" depends="re:uired$ minlength$ma#length"> <arg@ 4ey="display.username"/> <arg1 4ey="A>var2minlengthB" name="minlength" resource="+alse"/> <argC 4ey="A>var2ma#lengthB" name="ma#length" resource="+alse"/> <var> <var-name>ma#length</var-name> <var-value>1D</var-value> </var> <var> <var-name>minlength</var-name> <var-value>E</var-value> </var> </+ield> <+ield property="pass0ord" depends="re:uired" 7undle="alternate"> <msg name="re:uired" 4ey="userlogin.uPass0ord.re:uired" resource="true"/> </+ield> </+orm> F

En este e/emplo "ay una forma llamada Aser+oginForm. Esta forma tiene ( propiedades 0username1 y 0pass$ord1. En letra verde estn las declaraciones para validar la propiedad 0username1 en a8ul las de 0pass$ord1. En particular, la regla de validacin para 0username1 dice #ue es re#uerida y #ue tiene restricciones de longitud m!nima y m,ima. -er re#uerida implica #ue se debe ingresar alg5n valor a este campo, de lo contrario, se retornar al usuario un cdigo de error. +a longitud de 0username1 debe ser m!nimo B caracteres y m,imo &C. +os elementos 2arg'4, 2arg&4 y 2arg(4 especifican los parmetros a enviar al mensa/e de error #ue se mostrar al usuario. En general) El elemento 2form ...4 define el con/unto de campos a validar. De este elemento es importante el atributo 0name1 #ue corresponde al nombre del 2form3bean4 en struts3config.,ml

El elemento 2form ...4 puede tener & o mas elementos 2field4. Dada elemento 2field4 tambien tiene su atributo 0name1 cuyo valor corresponde al atributo 0name1 del 2form3 property4. .or e/emplo, la parte del struts3config.,ml #ue se refiere al Aser+oginForm ser!a)
<+orm-7eans> <+orm-7ean name=",ser-ogin"orm" type="org.apache.struts.validator.&ynaValidator"orm"> <+orm-property name="username" type="3ava.lang./tring"/> <+orm-property name="pass0ord" type="3ava.lang./tring"/> </+orm-7ean> </+orm-7eans>

El elemento 2field ...4 corresponde a una propiedad en un ActionForm. +os atributos de este elemento son) E property) nombre de una propiedad en un ActionForm #ue re#uiere validacin E depends) lista de reglas de validacin #ue se deben aplicar a este campo (delimitadas por comas . 7odas las reglas de validacin deben ser e,itosas para #ue la validacin del campo sea e,itosa. +a sinta,is de 2field4 dice #ue puede tener elementos opcionales como 2msg4, 2arg'4, 2arg&4, 2arg(4, 2argB4 F y cero o mas elementos 2var4. El elemento 2msg ...4 permite especificar un mensa/e de error alternativo para un elemento field. +a sinta,is de msg es) 2msg name>1..1 %ey>1...1 resource>1...1G4 donde name especifica la regla con la cual se debe usar el mensa/e (debe ser una de las definidas en validation3rules.,ml F %ey especifica la llave del resource bundle #ue se aadir al ActionError si la validacin falla y resource #ue si se establece en falso (false "ace #ue el valor del %ey se interprete como un literal de string o en verdadero (true "ace #ue el valor del %ey efectivamente sea una llave del resource bundle. .or e/emplo,
<msg name="re:uired" 4ey="userlogin.uPass0ord.re:uired" resource="true"/>

El elemento 2arg' ...4 (y 2arg&4, 2arg(4, 2argB4 son usados para pasar valores adicionales al mensa/e de error. Es decir, 2arg'4 es el primer parametro y 2arg&4 el segundo #ue se envia al mensa/e, y as! sucesivamente. <ecuerde #ue los argumentos de los mensa/es (display.pass$ord y display.username, en el e/emplo y los mensa/es (userlogin.u.ass$ord.re#uired , en el e/emplo #ue no se #uieren tomar como literales se deben copiar al resource bundle de su aplicacin. El elemento 2var ...4 se usa para establecer parmetros #ue el campo pueda re#uerir para pasar la validacin como por e/emplo los valores m!nimo y m,imo

de un rango en una validacin de rangos. +os referencian los elementos 2arg,4 usando la sinta,is H?var)var3name@

". #xtender $ction%orms o &yna$ction%orms con el validator


Asted no puede usar la clase ActionForm con validator, necesita usar subclases especiales de ActionForm. En particular, validator soporta ( tipos de ActionForm) E basado en los ActionForm estndar #ue incluye IalidatorActionForm y IalidatorForm E basado en los ActionForm dinmicosGdeclarativos #ue incluyen DynaIalidatorActionForm y DynaIalidatorForm. 7odas estas clases las provee el frame$or% de struts. En general se soluciona escogiendo el ,IalidatorForm #ue vaya de acuerdo con los tipos de ActionForm #ue tenga la aplicacin. .or e/emplo, la parte del struts3config.,ml #ue se refiere al Aser+oginForm ser!a)
<+orm-7eans> <+orm-7ean name=" ,ser-ogin"orm " type="org.apache.struts.validator.&ynaValidator"orm"> <+orm-property name="username" type="3ava.lang./tring"/> <+orm-property name="pass0ord" type="3ava.lang./tring"/> </+orm-7ean> J

6ote el tipo del form (org.apac"e.struts.validator.DynaIalidatorForm #uiere decir #ue usa DynaIalidatorForm como validador. ". #sta'lecer validate()true) en los action mappings
<action path="/user-ogin" type="co.edu.uniandes.changeset.0e7.pro3ect.action.,ser-ogin.ction" name=",ser-ogin"orm" scope="session" input=".tile.general.login.load" validate = "true"> <+or0ard name="success" path=".tile.general.login.success"/>

El valor de input es tambin importante por#ue es a la pgina #ue vuelve una ve8 se "a violado alguna de las validaciones, es decir, es el lugar donde se muestran los mensa/es de error

Anda mungkin juga menyukai