Ejemplo integrador del capítulo 7 En esta sección, complementaria de todo lo visto en el Capítulo 7, realizaremos un ejemplo integrador: crearemos una página de ingreso de usuarios al sistema, donde tendremos que ingresar, además, una serie de combinaciones de datos en diferentes formatos.
▼
Un ejemplo integrador .................2
▼
Resumen .......................................9
B#_Ejemplo_integrador_Cap_7.indd 1
▼
Actividades .................................10
08/09/2014 10:05
2
APÉNDICE A. EJEMPLO INTEGRADOR DEL CAPÍTULO 7
Un ejemplo integrador Después de tantos tags, tantos atributos, tantas configuraciones y modos de uso, es menester presentar un ejemplo integrador donde usemos todas las etiquetas y, además, veamos cómo acceder a los datos desde el servidor. Vamos a crear una página de ingreso de usuarios al sistema. Estamos acostumbrados a tener que ingresar nombre de usuario y contraseña para acceder a muchos de ellos. Aquí vamos a tener que ingresar, además, una serie de combinaciones de datos en diferentes formatos, sin perder de vista la seguridad! Como primer paso, vamos a declarar el form del tipo LazyValidatorForm que vamos a usar:
Solo un atributo será de selección múltiple, y lo definimos como arreglo. Luego, declaramos las dos acciones: la que prepara el formulario y, también, la que lo procesa:
La primera acción nos envía a la página que muestra el formulario de ingreso; la segunda acción tiene dos posibilidades, dependiendo de si el usuario ingresó correctamente los datos o no. Veamos la primera acción, VerLoginAction:
package capitulo7.action; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; import org.apache.struts.validator.LazyValidatorForm; public class VerLoginAction extends Action { public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { // Cast al tipo específico de objeto
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 3
08/09/2014 10:05
4
APÉNDICE A. EJEMPLO INTEGRADOR DEL CAPÍTULO 7
LazyValidatorForm dyna = (LazyValidatorForm) form; // Una colección de bailes Collection bailes = new HashSet(); bailes.add(new LabelValueBean(“Tango”, “t”)); bailes.add(new LabelValueBean(“Merengue”, “m”)); bailes.add(new LabelValueBean(“Vals”, “v”)); bailes.add(new LabelValueBean(“Swing”, “s”)); // Una colección de aves Collection aves = new Vector(); aves.add(new LabelValueBean(“Zorzal”, “z”)); aves.add(new LabelValueBean(“Colibri”, “c”)); aves.add(new LabelValueBean(“Golondrina”, “g”)); aves.add(new LabelValueBean(“Bencejo”, “b”)); aves.add(new LabelValueBean(“Chucao”, “ch”)); // Una colección de letras griegas Collection letras = new ArrayList(); letras.add(new LabelValueBean(“alfa”, “a”)); letras.add(new LabelValueBean(“beta”, “b”)); letras.add(new LabelValueBean(“gama”, “c”)); letras.add(new LabelValueBean(“delta”, “d”)); letras.add(new LabelValueBean(“epsilon”, “e”)); dyna.set(“bailes”, bailes); dyna.set(“aves”, aves); dyna.set(“letras”, letras); // Queremos ir a la vista de nombre “ok” return map.findForward(“ok”); } }
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 4
08/09/2014 10:05
5
DESARROLLO WEB CON JAVA DESDE CERO
Esta acción simplemente guarda unas colecciones en el formulario. En una aplicación más realista, estos datos seguramente estarían guardados en una base de datos o, al menos, en un archivo de propiedades y nunca en el código, pero, a los efectos del ejemplo, sirve. Notemos un detalle importante: las tres colecciones son implementadas por distintos tipos: HashSet, Vector y ArrayList. A la hora de mostrar las opciones o iterar, Struts itera sobre el tipo Collection sin importar qué clase específica es la que lo implementa. Este enfoque, sin embargo, necesita una precaución. En el primer caso, estamos usando un HashSet, que implementa un conjunto. La iteración sobre los elementos es desordenada, lo que implica que, en diferentes accesos a la página, podremos obtener los elementos en diverso orden. Esto puede confundir al usuario o ser proclive a errores si nuestra acción asume que los datos estaban en determinado orden. Veamos ahora la página JSP, donde hacemos extenso uso de los tags JSP que aprendimos en el capítulo.
Nombre de usuario:
Contraseña:
Igualdades
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 5
08/09/2014 10:05
6
APÉNDICE A. EJEMPLO INTEGRADOR DEL CAPÍTULO 7
ei · π = -1
A2 + B2 = C2
Baile
Aves
Letras griegas
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 6
08/09/2014 10:05
7
DESARROLLO WEB CON JAVA DESDE CERO
El resultado de esta página lo vemos en la Figura 1.
Figura 1. Todos los tipos de ingreso de datos posibles en una página, usando tags de Struts. Por último, la clase que obtiene los datos del formulario los procesa y redirige la acción según estos: www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 7
08/09/2014 10:05
8
APÉNDICE A. EJEMPLO INTEGRADOR DEL CAPÍTULO 7
package capitulo7.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.LazyValidatorForm; public class ProcesarLoginAction extends Action { public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { // Cast al tipo específico de objeto LazyValidatorForm dyna = (LazyValidatorForm) form; // Obtenemos todos los datos del formulario String usuario = (String) dyna.get(“usuario”);
TABLAS AVANZADAS El proyecto DisplayTag provee un paquete de tags muy poderosos para usar en las páginas JSP. Con ellos podremos crear tablas y manejar las columnas a mostrar, el ordenamiento, la paginación, los estilos y demás. Es un proyecto de código abierto. Su dirección web: http://displaytag.sourceforge.net.
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 8
08/09/2014 10:05
9
DESARROLLO WEB CON JAVA DESDE CERO
String clave = (String) dyna.get(“clave”); boolean e_i_pi = “on”.equals(dyna.get(“e_i_pi”)); boolean abc = “on”.equals(dyna.get(“abc”)); String baile = (String) dyna.get(“baile”); String[] aves = (String[]) dyna.get(“seleccionAves”); String letra = (String) dyna.get(“letra”); // Comparamos los datos if (usuario.equals(“juan”) && clave.equals(“perez”) && e_i_pi && !abc && baile.equals(“s”) && letra.equals(“b”) && aves.length == 2 && aves[0].equals(“z”) && aves[1].equals(“g”)) { // Ingreso correcto return map.findForward(“ok”); } else { // Acceso denegado return map.findForward(“denegado”); } } }
RESUMEN En esta sección, complementaria e integradora de todo lo visto en el Capítulo 7, creamos una página web de ingreso de usuarios al sistema.
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 9
08/09/2014 10:05
10
APÉNDICE A. EJEMPLO INTEGRADOR DEL CAPÍTULO 7
Actividades TEST DE AUTOEVALUACIÓN 1
Complete el ejemplo integrador creando las páginas de salida correspondientes.
2
Modifique el ejemplo integrador para que tome los textos de un archivo de recursos.
PROFESOR EN LÍNEA Si tiene alguna consulta técnica relacionada con el contenido, puede contactarse con nuestros expertos:
[email protected].
www.redusers.com
B#_Ejemplo_integrador_Cap_7.indd 10
08/09/2014 10:05