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.

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> |

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

Introducimos titulo2 en el campo de titulo

resultado final


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