Lab Plantillas Struts
Lab Plantillas Struts
Lab Plantillas Struts
Uso de plantillas
Objetivo.
Utilizar las propiedades de manejo de plantillas en Struts para implementarlas en una aplicación.
Pasos a seguir:
1. Importar una aplicación existente
2. Configurar el entorno de desarrollo
3. Crear las plantillas necesarias
4. Agregar las plantillas a la aplicación
1. Importar una aplicación existente.
● Crear un nuevo proyecto llamado UsoDePlantillas e importar el contenido del proyecto
LaboratorioFormasDinamicas.
● Realizar las modificaciones necesarias relacionadas con las rutas de bibliotecas.
● Probar la aplicación.
2. Configurando el entorno de desarrollo
Para poder utilizar las plantillas en una aplicación Struts es necesario realizar dos operaciones en el
archivo de configuración strutsconfig.xml:
Indicar al controlador de Struts que debe utilizar un objeto RequestProcessor a partir de una clase
diseñada para el uso de plantillas, en este caso la clase TilesRequestProcessor. Por lo que la siguiente
información debe agregarse al archivo strutsconfig.xml
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
La otra operación es activar el plugin tiles encargado de administrar las plantillas, para ello es
necesario agregar la siguiente instrucción en el archivo strutsconfig.xml
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true"/>
</plug-in>
De esta manera el contenido del archivo strutsconfig queda de la siguiente manera:
1
strutsconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-
config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="ValidarUsuarioForm"
type="ts.struts.beans.ValidarUsuarioForm"></form-bean>
<form-bean name="ListaUeasForm" type="ts.struts.beans.ListaUeasForm"></form-
bean>
<form-bean name="OpcionSeleccionadaForm"
type="ts.struts.beans.OpcionSeleccionadaForm"></form-bean>
<form-bean name="SeleccionAlumnoForm"
type="ts.struts.beans.SeleccionAlumnoForm"></form-bean>
<form-bean name="ListaCalificacionesForm"
type="ts.struts.beans.ListaCalificacionesForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="login" path="/paginas/login.jsp"></forward>
</global-forwards>
<action-mappings>
<action path="/validarUsuario" name="ValidarUsuarioForm" scope="request"
type="ts.struts.servlets.ValidarUsuarioAction">
<forward name="tablaUeas" path="/paginas/seleccionarUea.jsp"></forward>
</action>
<action path="/administrarUea" name="OpcionSeleccionadaForm" scope="session"
type="ts.struts.servlets.AdministrarUeaAction">
<forward name="seleccionarAlumno"
path="/paginas/seleccionarAlumno.jsp"></forward>
</action>
<action path="/administrarAlumno" name="SeleccionAlumnoForm" scope="request"
type="ts.struts.servlets.AdministrarAlumnoAction">
<forward name="calificaciones"
path="/paginas/calificacionesAlumno.jsp"></forward>
</action>
<action path="/registrarCalificaciones" name="ListaCalificacionesForm"
scope="request" type="ts.struts.servlets.RegistrarCalificacionesAction">
<forward name="registroCorrecto"
path="/paginas/registroCorrecto.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true"/>
</plug-in>
</struts-config>
2
Para el manejo de las definiciones, es necesario crear un archivo inicialmente vacío de configuración
llamado tilesdefs.xml en el directorio /WEBINF/
La estructura de este archivo es:
tilesdefs.xml
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
</tiles-definitions>
3. Crear las plantillas necesarias
La idea fundamental para el uso de plantillas en una aplicación, consiste en la definición de una
plantilla o página maestra en la que se define la estructura de la página, indicando las distintas zonas en
las que las páginas que utilicen la plantilla estarán divididas y la distribución de las mismas.
Las zonas de contenido dependiente de cada página deberán ser marcadas a través de dos tipos de
acciones disponibles en la biblioteca tiles.
insert. En una página maestra, se utiliza para indicar la existencia de una sección de contenido, sección
a la que se le asigna un nombre a través del atributo attribute de la acción.
Creación de la plantilla base.
● Crear una nueva carpeta llamada plantillas dentro de /Webcontent/
● Crear dentro del directorio plantillas, un archivo JSP llamado base
Para hacer uso de las herramientas de la biblioteca tiles, es necesario “importarlas” en el JSP, esto con
la instrucción
3
base.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:getAsString name="titulo"/></title>
</head>
<body>
<table width="90%">
<tr>
<td height="25%" colspan="2">
<tiles:insert attribute="encabezado"></tiles:insert>
</td>
</tr>
<tr>
<td>
<tiles:insert attribute="menu"></tiles:insert>
</td>
<td>
<tiles:insert attribute="cuerpo"></tiles:insert>
</td>
</tr>
</table>
</body>
</html>
Creación de los contenidos.
Los contenidos representan las porciones de código que tomarán el lugar de los elementos
especificados en <tiles:insert> durante la creación de las páginas de aplicación. Estos archivos puede
incluir código XHTML, HTML, JSP o acciones de Struts.
Se creará una plantilla por cada uno de los campos considerados en la plantilla maestra:
● encabezado
● menu
● cuerpo
Estas plantillas se crearán en el directorio plantillas
4
encabezado.jsp
<%@ 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">
<div align="center" style="background-color:aqua">
<h1>Aplicación de consulta y modificación de calificaciones</h1>
</div>
Para la vista de menú, se considera que de momento solo se desea que aparezca una liga que lleve a la
página de validación.
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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">
<center>
<br><br>
<html:link forward="login">Pantalla de validación</html:link>
</center>
Las páginas que representan el cuerpo (o los cuerpos) son aquellas ya desarrolladas, es decir las que
poseen cierta funcionalidad.
4. Agregar las plantillas a la aplicación
Es conveniente crear páginas sencillas que solo llamen a la página que tiene integrada la plantilla. En
este caso se creará una pantalla sencilla que llame a la vista de login ya con el resto de las pantallas que
componen la plantilla incluida.
Crear una carpeta llamada aplicacion, dentro se crea una vista llamada paginaLogin que haciendo uso
de las herramientas de tiles llama una definición.
paginaLogin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<tiles:insert definition=".login"/>
5
Definiciones.
Los mapeos o definiciones de las plantillas se configuran en el archivo tilesdefs.xml.
Configuración.
Lo primero es configurar la plantilla que sirve como base, esto se realiza con las siguientes
instrucciones:
tilesdefs.xml
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
<definition name=".principal" path="/plantillas/base.jsp">
<put name="titulo" value="Aplicación de consulta"/>
<put name="menu" value="/plantillas/menu.jsp"/>
<put name="encabezado" value="/plantillas/encabezado.jsp"/>
<put name="cuerpo" value=""/>
</definition>
En estas instrucciones se indica cómo se llenará cada uno de los atributos de la plantilla base, como son
el titulo, menu, encabezado y cuerpo. También se le asigna un nombre a la plantilla base, en este caso
“.principal” y se indica la ruta en donde se encuentra el archivo JSP.
Lo siguiente es realizar la definición asociada a la pantalla de login, en la vista se indicó que se utilizara
la siguiente definición.
<tiles:insert definition=".login"/>
Por lo que la definición debe declararse con el mismo nombre, como se quiere que se utilice la plantilla
general, se utiliza la instrucción extends para indicarlo, de esta menera, el archivo tilesdefs.xml queda:
tilesdefs.xml
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
<definition name=".principal" path="/plantillas/base.jsp">
<put name="titulo" value="Aplicación de consulta"/>
<put name="menu" value="/plantillas/menu.jsp"/>
<put name="encabezado" value="/plantillas/encabezado.jsp"/>
<put name="cuerpo" value=""/>
</definition>
6
Esto le indica que en el atributo “cuerpo” de la plantilla maestra, se cargue el contenido de la vista
login.jsp que es la que ofrece la funcionalidad de validar usuario.
Como los elementos html ya se encuentran en la plantilla, se pueden remover de la vista login.jsp, por
lo que el contenido de este archivo es el siguiente:
login.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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">
<h1>Introduce tus datos:</h1>
<html:submit>Aceptar</html:submit> <html:reset>Limpiar</html:reset>
</html:form>
Finalmente es necesario cambiar la página hacia la que hace referencia la liga en el menu, esta liga
llama a la pantalla de login, pero a la que no tiene asociada ninguna plantilla, se debe indicar una nueva
liga hacia la página que llama a la plantilla.
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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">
<center>
<br><br>
<html:link forward="paginaLogin">Pantalla de validación</html:link>
</center>
Es necesario realizar este mapeo en el archivo strutsconfig.xml
strutsconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-
config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="ValidarUsuarioForm"
7
type="ts.struts.beans.ValidarUsuarioForm"></form-bean>
<form-bean name="ListaUeasForm" type="ts.struts.beans.ListaUeasForm"></form-
bean>
<form-bean name="OpcionSeleccionadaForm"
type="ts.struts.beans.OpcionSeleccionadaForm"></form-bean>
<form-bean name="SeleccionAlumnoForm"
type="ts.struts.beans.SeleccionAlumnoForm"></form-bean>
<form-bean name="ListaCalificacionesForm"
type="ts.struts.beans.ListaCalificacionesForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="login" path="/paginas/login.jsp"></forward>
<forward name="paginaLogin" path="/aplicacion/paginaLogin.jsp"></forward>
</global-forwards>
<action-mappings>
<action path="/validarUsuario" name="ValidarUsuarioForm" scope="request"
type="ts.struts.servlets.ValidarUsuarioAction">
<forward name="tablaUeas" path="/paginas/seleccionarUea.jsp"></forward>
</action>
<action path="/administrarUea" name="OpcionSeleccionadaForm" scope="session"
type="ts.struts.servlets.AdministrarUeaAction">
<forward name="seleccionarAlumno"
path="/paginas/seleccionarAlumno.jsp"></forward>
</action>
<action path="/administrarAlumno" name="SeleccionAlumnoForm" scope="request"
type="ts.struts.servlets.AdministrarAlumnoAction">
<forward name="calificaciones"
path="/paginas/calificacionesAlumno.jsp"></forward>
</action>
<action path="/registrarCalificaciones" name="ListaCalificacionesForm"
scope="request" type="ts.struts.servlets.RegistrarCalificacionesAction">
<forward name="registroCorrecto"
path="/paginas/registroCorrecto.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-
INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true"/>
</plug-in>
</struts-config>
Probar la aplicación ejecutando el archivo paginaLogin.jsp en el servidor
8
Definiendo el resto de las vistas.
La siguiente vista a definir es en la que el usuario puede elegir la uea que desea consultar.
Lo primero es crear su página de aplicación en la carpeta aplicacion.
paginaSeleccionaUea.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<tiles:insert definition=".seleccionarUea"/>
Realizar el mapeo en el archivo tilesdefs.xml
tilesdefs.xml
<?xml version="1.0" encoding="UTF-8"?>
<tiles-definitions>
<definition name=".principal" path="/plantillas/base.jsp">
<put name="titulo" value="Aplicación de consulta"/>
<put name="menu" value="/plantillas/menu.jsp"/>
<put name="encabezado" value="/plantillas/encabezado.jsp"/>
<put name="cuerpo" value=""/>
</definition>
Hay que cambiar el mapeo del forward que manda a llamar a esta vista, esto es en el archivo
ValidarUsuarioAction
ValidarUsuarioAction.java
package ts.struts.servlets;
import java.util.LinkedList;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import ts.struts.beans.*;
import ts.struts.modelo.ObtenerDatos;
9
public class ValidarUsuarioAction extends Action{
listaUeas = obtener.llenarLista();
request.setAttribute("lista", listaUeas);
return mapping.findForward("paginaSeleccionarUea");
}
}
Este nuevo mapeo debe verse reflejado en el archivo strutsconfig.xml
strutsconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-
config_1_1.dtd">
<struts-config>
<data-sources />
<form-beans>
<form-bean name="ValidarUsuarioForm"
type="ts.struts.beans.ValidarUsuarioForm"></form-bean>
<form-bean name="ListaUeasForm" type="ts.struts.beans.ListaUeasForm"></form-
bean>
<form-bean name="OpcionSeleccionadaForm"
type="ts.struts.beans.OpcionSeleccionadaForm"></form-bean>
<form-bean name="SeleccionAlumnoForm"
type="ts.struts.beans.SeleccionAlumnoForm"></form-bean>
<form-bean name="ListaCalificacionesForm"
type="ts.struts.beans.ListaCalificacionesForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="login" path="/paginas/login.jsp"></forward>
<forward name="paginaLogin" path="/aplicacion/paginaLogin.jsp"></forward>
</global-forwards>
<action-mappings>
<action path="/validarUsuario" name="ValidarUsuarioForm" scope="request"
type="ts.struts.servlets.ValidarUsuarioAction">
<forward name="tablaUeas" path="/paginas/seleccionarUea.jsp"></forward>
<forward name="paginaSeleccionarUea"
path="/aplicacion/paginaSeleccionaUea.jsp"></forward>
</action>
10
<action path="/administrarUea" name="OpcionSeleccionadaForm" scope="session"
type="ts.struts.servlets.AdministrarUeaAction">
<forward name="seleccionarAlumno"
path="/paginas/seleccionarAlumno.jsp"></forward>
</action>
<action path="/administrarAlumno" name="SeleccionAlumnoForm" scope="request"
type="ts.struts.servlets.AdministrarAlumnoAction">
<forward name="calificaciones"
path="/paginas/calificacionesAlumno.jsp"></forward>
</action>
<action path="/registrarCalificaciones" name="ListaCalificacionesForm"
scope="request" type="ts.struts.servlets.RegistrarCalificacionesAction">
<forward name="registroCorrecto"
path="/paginas/registroCorrecto.jsp"></forward>
</action>
</action-mappings>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-
INF/tiles-defs.xml"/>
<set-property property="moduleAware" value="true"/>
</plug-in>
</struts-config>
Probar la aplicación ejecutando el archivo paginaLogin.jsp en el servidor
11