Tutorial de LookupDispatchaction struts

3

Por admin | Para la categoría de struts | noticia del 20-11-2009

LookupDispatchaction es otra clase de struts que complementa los ejercicios anteriores sobre formularios struts.

Habíamos visto la clase Dispatchaction en struts, que aportaba la posibilidad de realizar distintas acciones en una sola clase, añadiendo una nueva potencialidad a las clases action, las cuales solamente tenían el método service genérico para responder a las peticiones de los usuarios.

LookupDispatchaction tiene también en su configuración un parámetro parameter, que indica el nombre del método. Lookupdispatchaction tiene la ventaja que permite desde un mismo formulario poder llamar a distintos métodos.

Lookupdispatchaction

código de página ejercicios.jsp como los anteriores ejemplos

1
2
3
<div class="enlace">
   <html:link action="/dinamicoLookup"> 6) lookupdispatchAction  </html:link>
   </div>

lookupdispatchaction

Configuracion del bean DynaValidatorForm

1
2
3
4
5
6
7
8
 
!-- ================================================ Form Bean Definitions -->
 
    <form-bean name="dinamicolibro" type="org.apache.struts.validator.DynaValidatorForm">    
    <form-property name="titulo" type="java.lang.String" />
    <form-property name="autor"  type="java.lang.String" />    
    <form-property name="cambio" type="java.lang.String" />    
    </form-bean>

Configuración del archivo struts-config.xml para Action Mapping

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
<!-- =========================================== Action Mapping Definitions -->
 
    <action        
        path="/dinamicoLookup"
        forward="/pages/formularioLookup.jsp" />
 
        <action         
        path="/lookupDispatchAction"
        type="acciones.AccionLookupDispatchAction"
        scope="request"
        validate="true"
        name="dinamicolibro"       
        input ="/pages/formularioLookup.jsp"
        parameter="method">         
        <set-property property="cancellable" value="true" /> 
 
        <forward name="cancelada" path="/pages/cancelada2.jsp" />
        <forward name="editarlibros" path="/pages/edicion2.jsp"/>   
        </action>
 
        <action         
        path="/LookupDispatchAction2"
        type="acciones.AccionLookupDispatchAction"
        scope="request"
        validate="false"
        name= "dinamicolibro"                       
        parameter= "method">
 
        <set-property property="cancellable" value="true" /> 
 
        <forward name="cancelada" path="/pages/cancelada2.jsp" />
        <forward name="datoslibro" path="/pages/datoslibros.jsp"/>
        </action>

Configuración de la validación de los campos del bean en el fichero validation.xml dentro del tag

<form-validation>

Como repaso desde DynaValidatorForm, se creaban unos formularios bean dinámicos, que permitían validar los campos de un formulario sin teneer que crear la clase actionForm. En el fichero xml validation.xml se crean las reglas para que los campos sean obligatorios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <formset>
       <form name="dinamicolibro">
       <field       
        property="titulo"
        depends="required">        
        <arg key="libro.titulo" />
      </field>
 
      <field
        property="autor" 
        depends="required">
        <arg key="libro.autor" />
      </field>    
      </form>  
 
    </formset>

Configuración del fichero de propiedades properties

1
2
3
4
5
6
7
8
#lookupdispathAction
formularioLookup.cancelar = cancelar
formularioLookup.crear = crear
formularioLookup.editartitulo= EditarTitulo
formularioLookup.editarautor = EditarAutor  
tituloLookup.libro = LookupDispatchAction
Lookup.titulo = titulo 
Lookup.autor = autor

Código de la página jsp formularioLookup.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
<%@ 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="tituloLookup.libro"/></title>
<html:base/>
<link rel="stylesheet" type="text/css" href="../css/estilo.css" />
</head>
<body>
<div id="contenedor">
<h2><bean:message key="tituloLookup.libro"/></h2>
 
<div id="errores">
  <html:errors/> 
</div>
 <div id="imagen">
  <html:img srcKey="libro.imagen" titleKey="libro.imagen.alt"/>
  </div>
 
<div id="contenido">
<html:form action="lookupDispatchAction" focus="nombre" styleId="formulario" method="post">
 <div class="campo"> 
  <bean:message key="Lookup.titulo"/>
  <html:text property="titulo" />
  </div> 
 
  <div class="campo">
  <bean:message key="Lookup.autor"/>
  <html:text property="autor" />
  </div>
 
 
  <html:submit styleClass="boton" property="method"><bean:message key="formularioLookup.crear"/>  </html:submit>
  <html:cancel styleClass="boton"><bean:message key="formularioLookup.cancelar"/> </html:cancel>
  <html:reset  styleClass="boton" value="borrar"/> 
</html:form>
</div>
<div id="pie">
    <p> www.railsymas.com </p>
</div>
</div> 
 
</body>
</html:html>

Clase LookupDispatchAction AccionLookupDispatchAction.java

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package acciones;
 
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.actions.LookupDispatchAction;
import org.apache.struts.validator.DynaValidatorForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.HashMap;
 
 
public class AccionLookupDispatchAction extends LookupDispatchAction {
 
	private ActionForward envio;
	private DynaValidatorForm formulario;
	private String titulo;
	private String autor;
 
 
	protected Map getKeyMethodMap ()
	{
		Map map = new  HashMap();	
		map.put("formularioLookup.editartitulo","EditarTitulo");
		map.put("formularioLookup.editarautor","EditarAutor");		
		map.put("formularioLookup.crear","crear");	
 
		return map;
	}
 
 
	protected ActionForward cancelled (ActionMapping mapping,ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		if (isCancelled(request)){
 
		     envio = mapping.findForward("cancelada");
			}
 
			return envio;
	}
	//creamos los métodos que responden a las acciones
	public  ActionForward crear ( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws Exception
	{
		  //recuperamos los datos del formulario bean dinámico Validator
		  formulario = (DynaValidatorForm) form;
 
		  titulo = formulario.getString("titulo");
		  autor = formulario.getString("autor"); 
 
		  System.out.println(titulo);
 
	      envio = mapping.findForward("editarlibros");
 
 
		return envio;
 
	}
 
	public ActionForward EditarTitulo (ActionMapping mapping, ActionForm form, HttpServletRequest resquest, HttpServletResponse response) throws Exception
	{
 
		//recuperamos los datos del formulario bean dinámico Validator
	    formulario = (DynaValidatorForm) form;
 
	    String cadena = "Se ha cambiado "+this.titulo+" por "+formulario.getString("titulo");
 
	    formulario.set("cambio",cadena);
 
	    //recargamos el formulario con el valor guardado
	     formulario.set("autor",this.autor);
 
 
		 envio = mapping.findForward("datoslibro");
 
		 return envio;
	}
 
	public ActionForward EditarAutor (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		//recuperamos los datos del formulario bean dinámico Validator
 
		//recuperamos los datos del formulario bean dinámico Validator
	    formulario = (DynaValidatorForm) form;
 
	    String cadena = "Se ha cambiado "+this.autor+" por "+formulario.getString("autor");
 
 
 
	    formulario.set("cambio",cadena);
 
	    //recargamos el formulario con el 
	    formulario.set("titulo",this.titulo);
 
 
	    envio = mapping.findForward("datoslibro");	
 
	    return envio;
 
	}
 
 
}

LookupDispatchAction, permite al igual que con dispatchaction tener varias acciones (métodos) en la misma clase de tal forma que tenemos dos formularios que llaman a la misma clase. A través de los diferentes métodos se realizan distintas acciones.

Se utiliza un HashMap para establecer un conjunto de contraseñas para los distintos métodos a usar, esas contraseñas son las ulilizadas en los botones de las páginas jsp.

Es necesario crear el método protected Map getKeyMethodMap para la creación del conjunto de claves método.

Si se quiere incluir el botón de cancelación con el uso de esta clase, la configuración en el fichero struts-config.xml para ello no responde, por lo que hay que hacer cambios en la clase java e incluir el método cancelled para sobreescribirlo y responder al botón de cancelación.

Imagen resultado del envío de los datos

libros2

Introducimos titulo2 en el campo de titulo

libros3

resultado final

libros4

Comentarios (3)

Me gustaría saber donde me puedo descargar videotutoriales de j2ee y struts. Gracias

Los tutoriales estan en línea, no son videotutoriales.

muy educativo me ha servido de utilidad

Escribe un comentario