Struts formulario DynaValidatorForm eclipse

0

Por admin | Para la categoría de struts | noticia del 14-09-2009

Tutorial de struts DynaValidatorForm

En el anterior post para la categoría de struts habíamos visto los formularios dinámicos de struts, como repaso decíamos que eliminaban la creación de de la clase de tipo actionForm mediante la configuración del form bean en el fichero struts-config.xml.

Lo que ocurria con la clase DynaActionForm era que aunque teníamos el código para la validación de los campos en la clase no funcionaba pero que se podían imprimir los mensajes y devolverlos mediante el objeto request de petición.

La validación también sería posible mediante javascript como otros lenguajes pero struts dispone de una clase que facilita todo esto, esta clase se llama DynaValidatorForm y permite la validación de los campos de un formulario dinámico.

En los ejemplos anteriores redirigíamos la accion Welcome.do a las páginas correspondientes de cada ejemplo con lo cual perdíamos en el proyecto la posibilidad de interactuar con los anteriores ejemplos, para que no ocurra eso se puede crear una página sólo de enlaces, a los diferentes ejercicios a modo de menú.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  <global-forwards>
        <!-- Default forward to "Welcome" action -->
        <!-- Demonstrates using index.jsp to forward -->
        <forward
            name="welcome"
            path="/Welcome.do"/>
    </global-forwards>
 
 
<!-- =========================================== Action Mapping Definitions -->
 
    <action-mappings>
            <!-- Default "Welcome" action -->
            <!-- Forwards to Welcome.jsp -->
            <!-- modificamos el forward para que apunte a la pagina de login.jsp -->
        <action
            path="/Welcome"           
            forward="/pages/ejercicios.jsp"/>

lo que estamos haciendo es redirigir el Welcome.do a la página ejercicios.jsp que está en la carpeta pages

ejercicio

para la css estilo.css añadido

 
 .enlace { height:40px; }

Código de la página ejercicios.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejercicios</title>
<html:base/>
 <link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
 
 <div id="contenedor">
 
   <h2> <bean:message key="ejercicios"/> </h2>
 
   <div class="enlace"> 
   <html:link page="/pages/login.jsp"> 1) formulario login ActionFom </html:link>
   </div>
 
   <div class="enlace">
   <html:link page="/pages/formulariodinamico.jsp"> 2) formulario din&aacute;mico </html:link>
   </div>
 
   <div class="enlace">
   <html:link page="/pages/formdinavalidacion.jsp"> 3) formulario din&aacute;mico validaci&oacute;n </html:link>
   </div>  
 
   <div id="pie">
    <p> www.railsymas.com </p>
   </div> 
 
 </div>
</body>
</html:html>

Cofiguración en el struts-config.xml del bean dynavalidatorform tenemos el nombre del bean en el atributo name y en el atributo type la clase a la que pertenece, después tenemos los mismos campos que en el formulario dynaactionform, nombre, domicilio y edad inicializado a 18

1
2
3
4
5
6
    <form-bean name="dinamicoValidacion" type="org.apache.struts.validator.DynaValidatorForm">
 
    <form-property name="nombre" type="java.lang.String" />
    <form-property name="domicilio" type="java.lang.String" />
    <form-property name="edad" type="java.lang.Integer" initial="18" />    
    </form-bean>

Si nos fijamos en el fichero de configuración struts-config.xml viene lo siguiente descomentado ya en el proyecto en blanco struts-blank.xml del que partimos

1
2
3
4
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property      property="pathnames"    value="/org/apache/struts/validator/validator-rules.xml,
               /WEB-INF/validation.xml"/>
  </plug-in>

Struts utiliza dos ficheros xml de configuración uno que vamos a introducir datos validation.xml y el otro lo dejaremos como está y comentaremos más adelante validator-rules.xml donde tenemos la configuración tipos de campos (entero real etc ) presencia o no de un campo todo ya proporcionado por el framework struts. Estos dos ficheros estan en la carpeta web-inf del proyecto.

Dentro del fichero validation.xml introducimos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <formset>
 
     <form name="dinamicoValidacion">
        <field
          property="nombre"
          depends="required">
               <arg key="campo.nombre"/>        
        </field> 
 
        <field 
          property="domicilio"
          depends="required">
          <arg key="campo.domicilio"/>
        </field>
 
     </form>
    </formset>

Como ya venía este fichero con bloques declarados nos fijamos que tiene la siguiente estructura
y dentro se declara el formulario con sus campos .
El name del form tiene que ser el mismo del nombre que el declarado en la sección formbean para el formulario de validación dinámica. Solamente para los dos campos del formulario nombre y domicilio se pide que sean rellenados para ello ponemos depends=”required” esto funciona ya que el fichero validator-rules.xml lo tiene así establecido.

Código de la página formdinavalidacion.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><bean:message key="titulo.dinamico"/></title>
<html:base/>
<link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
<div id="contenedor">
<h2><bean:message key="titulo.dinamicoValidacion"/></h2>
 
<div id="errores">
  <html:errors/> 
</div>
 <div id="imagen">
  <html:img srcKey="dinamicoValidacion.registro.imagen" titleKey="dinamicoValidacion.registro.imagen.alt"/>
  </div>
 
<div id="contenido">
<html:form action="dinamicoValidacion" focus="nombre" styleId="formulario" method="post">
 <div class="campo"> 
  <bean:message key="login.nombre"/>
  <html:text property="nombre"/>
  </div> 
  <div class="campo">
  <bean:message key="login.domicilio"/>
  <html:text property="domicilio"/>
  </div>
 
  <div class="campo">
  <bean:message key="login.edad" />
  <html:password property="edad" maxlength="3" size="3"/>
  </div>
  <html:submit styleClass="boton" value="enviar"/>
  <html:cancel styleClass="boton" value="cancelar"/> 
</html:form>
</div>
<div id="pie">
    <p> www.railsymas.com </p>
</div>
</div> 
 
</body>
</html:html>

imagen del formulario

validacion

Se puede ver como al enviar el formulario ya valida la presencia de los campos en este caso se envió vacío y nos muestra el aviso de los dos campos

Código del formulario de cancelación es el mismo código que en el formulario DynaActionForm ya que no es necesario tocarlo pero se vuelve a incluir aquí para este ejemplo código de cancelada2.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
 
<title> <bean:message key="cancelada.titulo"/></title>
<html:base/>
 
 <link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
 
  <div id="contenedor">   
 
  <h2> <bean:message key="cancelada.login"/> </h2>
  <div id="imagen">
  <html:img srcKey="cancelada.imagen" titleKey="cancelada.imagen.alt"/>
  </div>
  <div id="mensaje">
  <bean:message key="cancelada.mensaje"/>
  <div class="campo">
  <html:link page="/pages/ejercicios.jsp" > Volver al men&uacute; de ejercicios
  </html:link>
  </div>
  </div>
  <div id="pie">
    <p> www.railsymas.com </p>
  </div>
 
  </div>
 
</body>
</html:html>

Código fuente de la página personales datospersonales2.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><bean:message key="titulo.dinamicoValidacion"/></title>
<html:base/>
 <link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
  <div id="contenedor">
  <h2>Bienvenido <bean:write name="dinamicoValidacion" property="nombre"/></h2>
 
  <div id="imagen">
  <html:img srcKey="dinamicoValidacion.imagen" titleKey="dinamicoValidacion.imagen.alt"/>
  </div>
  <div id="mensaje">
  <bean:message key="dinamicoValidacion.mensaje"/>
 
  <div class="campo">
  <bean:write name="dinamicoValidacion" property="nombre"/>
  </div>
  <div class="campo">
  <bean:write name="dinamicoValidacion" property="domicilio"/>
  </div>
  <div class="campo">
  <bean:write name="dinamicoValidacion" property="edad"/>
  </div>  
  </div>
<div id="pie">
 <p>www.railsymas.com </p>
</div> 
 
</div>
</body>
</html:html>

El formulario se ha enviado correctamente y se muestran los datos
pasando nombre:manolo domicilio: casa de manolo edad 59

resultado

Cofiguración del action en el fichero struts-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <action        
        path="/dinamicoValidacion"
        type="acciones.AccionDinamicaValidacion"
        scope="request"
        name="dinamicoValidacion"
        validate="true"
        input="/pages/formdinavalidacion.jsp"
        >
 
         <set-property property="cancellable" value="true" />   
 
         <forward name="cancelada" path="/pages/cancelada2.jsp" />
         <forward name="datospersonales" path="/pages/datospersonales2.jsp"/>  
 
        </action>

Clase Action en el package de acciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package acciones;
 
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionForm;
import org.apache.struts.validator.DynaValidatorForm;
 
 
public class AccionDinamicaValidacion extends Action {
 
 
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
 
		DynaValidatorForm formularioValidacion = (DynaValidatorForm) form; 
 
		ActionForward reenvio = null;
 
		if (isCancelled(request)) {
			//log.debug("Se ha pulsado el boton cancel");
			return mapping.findForward("cancelada");
		}
 
 
		reenvio = mapping.findForward("datospersonales");
 
		 return reenvio;
 
	}
}

Código de messageResources_es_Es.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
#titulo página ejercicios
ejercicios = Ejercicios
 
#claves para la página de formulario
titulo.dinamicoValidacion = formulario din&aacute;mico Validaci&oacute;n
dinamicoValidacion.imagen = ../imagenes/iconovalidacion.png
dinamicoValidacion.imagen.alt = icono validaci&oaccuten
dinamicoValidacion.mensaje = Te has registrado correctamente
dinamicoValidacion.registro.imagen = ../imagenes/usuario2.png
dinamicoValidacion.registro.imagen.alt = icono usuario
 
 
campo.nombre = el nombre
campo.domicilio = el domicilio
 
errors.required={0} es requerido.

Vemos como en el fichero de propiedades pares, clave valor properties viene “error.required” donde {0} se sustituye por el valor campo domicilio segun el fichero validation.xml en ” ” para el caso de domicilio lo mismo ocurre con el nombre.

Comentarios cerrados automáticamente al pasar más de un año