Nunca llueve eternamente
El Cuervo

[Struts Validator] – input en struts-config.xml

Si queremos que Struts valide automáticamente un formulario, debemos indicarlo en la declaración de nuestro action en struts-config.xml, mediante validate="true". Entonces Struts ejecutará las validaciones de Struts Validator y el método validate () del formulario.

Si la validación de los datos es correcta, entonces Struts continua con el flujo normal hacia el Action declarado. En caso contrario, el flujo seguirá hacia el path que indiquemos en la propiedad input="…", con los mensajes de error de las validaciones no superadas.

<action path="/editar*" type="es.xxx.xxx.control.actions.{1}Action" parameter="editar" name="{1}Form" scope="request" validate="true" input="{1}" roles="1">

      <forward name="success" redirect="false" path="{1}" />

</action>

La idea original de la propiedad input (entrada en español) era indicar el path de la JSP que había introducido los datos, para redirigir el flujo hacia ella indicando los errores de validación para que el usuario pudiera cambiarlos.

Sin embargo, es posible que nos interese redirigirla a una acción en lugar de hacia una JSP, por ejemplo para hacer consultas previas a BBDD que no están cacheadas, o para no perder el contenido original de la request que invocó la primera vez la JSP. Para ello simplemente indicamos en input la acción a la que queremos redirigir:

input="/recargarCombos{1}.do"

[tags]struts, struts validator[/tags] 

También te puede interesar:

  • [Struts] – ActionDispatcher Struts permite manejar eventos HTML, mediante la clase ActionDispatcher, LookupDispachAciton y MappingDispatchAction que encontramos en el paquete org.apache.struts.actions. En la clase Action declaramos un ActionDipatcher...
  • [Struts Validator] – Formulario no declarado Otro post de mensajes poco claros de Struts: ServletException in '/jsp/ContenedorFormulario.jsp': No form found under 'SolicitudForm' in locale 'es_ES'. A form must be defined in...
  • Framework Struts Un esquema de su funcionamiento podría ser el siguiente: JSP Manda datos introducidos por el usuario al Action Pinta los datos recibidos del Action FORM...
  • [Struts Validator] – Mensajes con argumentos Cuando una validación no pasa, Struts Validator pinta un mensaje que le puedes acompañar con los argumentos que quieras. En una validación validwhen, yo quería...
  • [Struts Validator] – Validaciones múltiples validwhen Leo textualmente la guía de Struts Validator : A few quick notes on the grammer. All comparisons must be enclosed in parens. Only two items...

12 Comentarios hasta el momento »

  1. FelipeM dijo

    11 de September del 2007 a las 1:10 pm

    Hola,

    El {1} ¿a qué equivale? no entiendo qué hace en medio de la dirección del action :-S

    Un saludo.

  2. yoyoooyoy dijo

    11 de September del 2007 a las 2:32 pm

    Vale, qué descuido !!! creía que había explicado el tema de las wildcards también aquí.

    Echa un vistazo a los “Wildcards” en la Lyckapedia:
    http://www.hachisvertas.net/jcs/wiki/index.php?title=Struts_Wildcards

    En este caso, {1} toma el valor del *. Por ejemplo, editarUsuario corresponde al path “/editar*”, y será atendido por el action UsuarioAction que será alimentado por el formulario UsuarioForm, y el flujo continuará hacia la tile Usuario tanto si todo es correcto (forward success) como si falla la validación (input).

    Básicamente {1}, {2}… {n} son sustituidos por parámetros. Pasa igual por ejemplo en los mensajes de error del struts-validator: mira el MessageResources y verás por ejemplo :
    errors.maxlength={0} can not be greater than {1} characters.
    {0} y {1} son los argumentos que declaras en el validator.xml:
    <field property=”datosProyecto.resumen” depends=”required, maxlength”>
    <arg0 key=”datosProyecto.resumen” />
    <arg1 name=”maxlength” key=”${var:maxlength}” resource=”false”/>
    <var><var-name>maxlength</var-name><var-value>3500</var-value></var>
    </field>

    Muchas gracias por el comentario

  3. FelipeM dijo

    11 de September del 2007 a las 8:09 pm

    Vaya, utilizo las variables con ActionMessage/Validator, pero no conocía esa posibilidad con los * !

    La culpa es mía por preguntar sin antes darme una vuelta por la web y ver artículos que habías escrito ;-)

    Un saludo.

  4. yoyoooyoy dijo

    12 de September del 2007 a las 9:01 am

    No hombre, si se agradecen los comentarios (así parece que le sirve a algien :P ) y me sacas unos minutos de la rutina del curro.

    Hoy en día los archivos de configuración se están convirtiendo en el precio a pagar por utilizar frameworks, y se están convirtiendo en el principal problema para mantener un proyecto.

    De tu comentario y del de Jesús en http://www.hachisvertas.net/blog/01/2007/03/13/struts-configuracion-de-struts/ intentaré sacar un artículo de buenas prácticas para no convertir en monstruos demoníacos nuestros xml y properties.

    Gracias por vuestros comentarios!!!

  5. minifreak dijo

    6 de March del 2008 a las 9:45 am

    Muy buenas!

    Yo tengo otra pregunta:
    ¿Considerarías el hecho de utilizar los paths de los mappings en los inputs como una best practice?
    Por lo que he podido leer, comentas que es posible utilizar esta solución, pero que la idea original era utilizar una jsp o entrada de tiles.
    Como ves la posibilidad de sobreescribir el TilesRequestProcessor para que haga la lógica que nos interese (incluso utilizar forwards como inputs, inputForward=true en la definición del Controller en el struts-config.xml) y la carga de datos se haga implementando el método populate() de nuestro FormBean llamándose cada vez que se ejecuta el método validate(), el cual sobreescribiriamos y llamaríamos al super.validate().
    ¿Se reduciría de esta manera el flujo de nuestra aplicación y por lo tanto esta sería una best practice?

    Saludos y gracias.

    PD: Muy bueno lo de las wildcards, no lo sabia… :P

  6. yoyoooyoy dijo

    6 de March del 2008 a las 11:50 am

    Muchas gracias minifreak por tu comentario.

    Si te parece, vamos por partes, y como creo que las respuestas llevarían bastante espacio te voy a contestar con sendos posts :)

    Además llevo tiempo queriendo resumir todos los posts de Struts en un libro, y sacar tiempo para reescribrir bien el manual de struts.

    (si te corre prisa dame un toque vía mail o comantario y te respondo más rápido)

  7. Lycka Bonita » [Struts] - Input y Forwards de un Action dijo

    7 de March del 2008 a las 8:20 am

    [...] pregunta minifreak en [Struts Validator] – input en struts-config.xml si considero que es una best practice que tanto input como forward se refieran a acciones y no a [...]

  8. Luis Tlatelpa dijo

    28 de September del 2011 a las 6:52 pm

    Hola que tal. Tengo una pregunta:

    ¿Y si quisieramos que el validator siguiera su flujo hacia una propiedad que no sea el INPUT?

    SAludos!!!

  9. yoyoooyoy dijo

    29 de September del 2011 a las 7:44 am

    Hola Luis,

    no estoy muy seguro de entenderte. La propiedad “input” no es exactamente desde donde viene la llamada, es a donde quieres que Struts redirija el flujo si la validación falla, con lo cual debes rellenar esa propiedad con la dirección que tienes en mente.

    Es eso lo que querías saber?

  10. Elena dijo

    1 de December del 2011 a las 9:55 am

    Hola! Si lo he entendido bien, si vengo de una jsp, ponle vuelos.jsp, pasa por mi validate(), y en el fichero xml tengo:

    /jsp/common/vuelos.jsp
    /jsp/common/_loadJsonErrors.jsp
    /jsp/application/notLogged.jsp

    si en el validate hay algún error, me debería enviar a la jsp _loadJsonErrors.jsp, ¿cierto? No a vuelos.jsp

    Muchas gracias

  11. Elena dijo

    1 de December del 2011 a las 9:58 am

    Perdón, no sé porqué no se ha escrito bien, quería decir:

    /jsp/vuelos.jsp
    /jsp/_loadJsonErrors.jsp

  12. Elena dijo

    1 de December del 2011 a las 10:01 am

    Perdonad, no sé porqué no se escribe lo que quiero. Las direcciones de las jsps que escribo se refieren a los results del xml. Si result name = success, pues vuelos.jsp, si result name = input, pues _loadJsonErrors.jsp. Espero que se entienda.

    Un saludo

Comentarios RSS · TrackBack URI

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario:

Comenta