Professional Documents
Culture Documents
Figura 7.1
2. Aparecer el primer cuadro del asistente para crear un nuevo proyecto, figura
7.2. En este cuadro del asistente seleccionaremos el tipo de proyecto que
deseamos crear. Como vamos a crear una aplicacin Web, seleccionaremos la
opcin Web en el recuadro Categories: y la opcin Web Application en el
recuadro Projets:, y luego presionaremos el botn Next>.
3. Aparecer el segundo del asistente para crear proyectos, mostrada en la figura
7.3. En este cuadro seleccionaremos el nombre y la ubicacin del proyecto.
ITSON
174
Figura 7.2
Figura 7.3
ITSON
Tutorial 7
a)
b)
c)
d)
e)
f)
g)
175
4. Aparecer el tercer cuadro del asistente para crear proyectos, figura 7.4. Este
cuadro nos permite establecer si nuestra aplicacin Web usar el marco de Java
Server Faces 1.1 o Struts 1.2.7. Como se va a utilizar el marco Struts haga clic
en la casilla de verificacin: Struts 1.2.7.
5. Al hacerlo aparecer en la parte inferior del cuadro unos elementos de entrada
para configurar la aplicacin, figura 7.5. Aqu slo modifique la ruta del archivo
de recursos de mensajes, Application Resorce:, a
com.amanteMusicaStruts.struts. Application Resorce, dejando el resto de
los elementos sin modificar. Presione el botn Finish.
6. Desaparecer el asistente para crear un nuevo proyecto y aparecer lo
mostrado en la figura 7.6. Del lado derecho aparece el editor de NetBeans con el
esqueleto de la pgina JSP principal: index.jsp, mientras que del lado
izquierdo aparece el rbol de los proyectos, en el que aparece el proyecto
amanteMusicaStruts.
7. Si en el recuadro del rbol de los proyectos hacemos clic en la pestaa Files,
aparecer un rbol con todos los archivos de los proyectos, figura 7.7. Otra vez,
en este momento slo aparecen los archivos del proyecto amanteMusicaStruts.
ITSON
176
Figura 7.4
Figura 7.5
ITSON
Tutorial 7
177
Figura 7.6
Figura 7.7
8. Podemos ver que Netbeans gener dos archivos: index.jsp y
welcomeStruts.jsp. En realidad gener una aplicacin de demostracin. Al
ejecutar la aplicacin veremos en el navegador Web la pgina inicial
(index.jsp) de la aplicacin, figura 7.8
9. Si hacemos clic en el hipervnculo: Struts Welcome Page de la pgina
index.jsp, la aplicacin invocar a la pgina welcomeStruts.jsp, como se
muestra en la figura 7.9. Lo anterior sucede porque en la pgina index.jsp la
liga a la pgina welcomeStruts.jsp aparece como:
ITSON
178
Figura 7.8
Figura 7.9
<a href="./Welcome.do">Struts Welcome Page</a>
ITSON
Tutorial 7
179
Como el servlet ActionServlet est configurado para aceptar todos los nombres
que tienen la extensin .do como nombres lgicos de URL, busca en el
archivo struts-config.xml un elemento de accin con el atributo
path="/Welcome". Este elemento es:
<action-mappings>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>
Figura 7.10
10. Edite el archivo index.jsp para que su cdigo sea el siguiente:
index.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/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>Amante Musica: Versin Struts</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
ITSON
180
</head>
<body>
<h1 align="center">Amante Musica Versin Struts</h1>
<br/>
<br/>
<html:link action="/CapturaClave?tarea=agregarCancion">
Agrega Cancin
</html:link>
<br/>
<br/>
<html:link action="/CapturaClave?tarea=eliminarCancion">
Elimina Cancin
</html:link>
<br/>
<br/>
<html:link action="/ObtenCancionesTodas">
Consulta Canciones Todas
</html:link>
</body>
</html:html>
path="/Welcome.do"/>
a
<global-forwards>
<forward name="inicio" path="/index.jsp" />
</global-forwards>
Esto define a inicio como un nombre lgico para la ruta a la pgina index.jsp y
puede ser usado en cualquier clase de accin para pasar el control a esta pgina.
ITSON
Tutorial 7
181
a
<action-mappings>
<action path="/Inicio" forward="/index.jsp"/>
<action path="/CapturaClave" forward="/capturaClave.jsp"/>
</action-mappings>
ITSON
182
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Amante Musica: Versin Struts - Captura Clave</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
<h1 align="center">Amante Musica: Versin Struts</h1>
<br/>
<br/>
<%-- Guarda en la variable de sesin "tareaSeleccionada"el valor de la
tarea seleccionada --%>
<c:set value="${param.tarea}" var="tareaSeleccionada" scope="session" />
<c:choose>
<%-- Si la tarea es agregar cancin, despliega un encabezado --%>
<c:when test="${tareaSeleccionada == 'agregarCancion'}" >
<h2 align="center">Cancin a agregar</h2>
</c:when>
<%-- Si la tarea es eliminar cancin, despliega otro encabezado --%>
<c:when test="${tareaSeleccionada == 'eliminarCancion'}" >
<h2 align="center">Cancin a eliminar</h2>
</c:when>
</c:choose>
<br />
<br />
<%-- Formulario para capturar la clave y enviarla a la pgina
para obtener la cancin --%>
<html:form action="ObtenCancion.do" method="post">
<table align="center">
<tr>
<td>Clave</td>
<td><html:text property="clave" size="35" /></td>
</tr>
</table>
<br />
<br />
<table align="center" width=50%>
<tr>
<%-- Botn enviar --%>
<td><html:submit property="boton" value="Continuar" /></td>
<%-- Botn cancelar. Dejar el valor por omisin para el atributo
property para que el mecanismo de deteccin de cancelar en la
clase de accin funcione. --%>
<td><html:cancel value="Cancelar" /></td>
<%-- Botn restaurar --%>
<td><html:reset value="Restaurar" /></td>
</tr>
</table>
</html:form>
</body>
</html:html>
ITSON
Tutorial 7
183
Figura 7.11
2. Aparecer la primera ventana del asistente para crear un nuevo archivo, figura
7.12. En esta ventana del asistente seleccionaremos el tipo de archivo que
deseamos crear. Seleccionaremos la opcin Web en el recuadro Categories: y
la opcin Struts ActionForm Bean en el recuadro File Types:, y luego
presionaremos el botn Next>.
3. Aparecer la segunda ventana del asistente para crear un archivo, mostrada en
la figura 7.13. En esta ventana estableceremos el nombre y la ubicacin del
objeto de formulario.
a)
b)
c)
d)
ITSON
184
Figura 7.12
Figura 7.13
ITSON
Tutorial 7
185
Figura 7.14
5. Edite el objeto de formulario CancionForm.java con el cdigo mostrado:
CancionForm.java
/*
* CancionForm.java
* @author mdomitsu
* @version
* Created on 2 de noviembre de 2006, 07:38 PM
*/
package objetosFormularios;
import
import
import
import
javax.servlet.http.HttpServletRequest;
org.apache.struts.action.ActionErrors;
org.apache.struts.action.ActionMapping;
org.apache.struts.action.ActionMessage;
import objetosServicio.Fecha;
import utils.Validador;
/**
* Esta objeto de formulario permite la transferencia de la clave de una
* cancin de la pgina capturaClave.jsp a la clase de accin
* ObtenCancion.java y de la pgina capturaCancion.jsp a la clase de accin
* AgregarCancion.java de la aplicacin Web AmanteMusicaStruts
*/
ITSON
186
ITSON
Tutorial 7
187
}
/**
* Establece el intrprete de la cancin
* @param interprete El intrprete de la cancin
*/
public void setInterprete(String interprete) {
this.interprete = interprete;
}
/**
* Regresa el autor de la letra de la cancin
* @return El autor de la letra de la cancin
*/
public String getAutorLetra() {
return autorLetra;
}
/**
* Establece el autor de la letra de la cancin
* @param autorLetra El autor de la letra de la cancin
*/
public void setAutorLetra(String autorLetra) {
this.autorLetra = autorLetra;
}
/**
* Regresa el autor de la msica de la cancin
* @return El autor de la msica de la cancin
*/
public String getAutorMusica() {
return autorMusica;
}
/**
* Establece el autor de la msica de la cancin
* @param autorMusica El autor de la msica de la cancin
*/
public void setAutorMusica(String autorMusica) {
this.autorMusica = autorMusica;
}
/**
* Regresa el gnero de la cancin
* @return El gnero de la cancin
*/
public String getGenero() {
return genero;
}
/**
* Establece el gnero de la cancin
* @param genero El gnero de la cancin
*/
public void setGenero(String genero) {
this.genero = genero;
}
ITSON
188
/**
* Regresa el lbum de la cancin
* @return El lbum de la cancin
*/
public String getAlbum() {
return album;
}
/**
* Establece el lbum de la cancin
* @param album El lbum de la cancin
*/
public void setAlbum(String album) {
this.album = album;
}
/**
* Regresa la disquera de la cancin
* @return La disquera de la cancin
*/
public String getDisquera() {
return disquera;
}
/**
* Establece la disquera de la cancin
* @param disquera La disquera de la cancin
*/
public void setDisquera(String disquera) {
this.disquera = disquera;
}
/**
* Regresa la duracin de la cancin, como una cadena
* @return La duracin de la cancin, como una cadena
*/
public String getDuracion() {
return duracion;
}
/**
* Establece la duracin de la cancin, como una cadena
* @param duracion La duracin de la cancin, como una cadena
*/
public void setDuracion(String duracion) {
this.duracion = duracion;
}
/**
* Regresa la fecha de la cancin, como una cadena
* @return La fecha de la cancin, como una cadena
*/
public String getFecha() {
return fecha;
}
ITSON
Tutorial 7
189
/**
* Establece la fecha de la cancin, como una cadena
* @param fecha La fecha de la cancin, como una cadena
*/
public void setFecha(String fecha) {
this.fecha = fecha;
}
/**
* Restablece los valores de los atributos de la clase de la cancin a sus
* valores iniciales.
* @param mapping La instancia de ActionMapping, el mapa empleado para
* seleccionar esta clase de accin.
* @param request La solicitud HTTP que se est procesando.
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
clave = "";
titulo = "";
interprete = "";
autorLetra = "";
autorMusica = "";
genero = "";
album = "";
disquera = "";
duracion = "";
fecha = "";
}
/**
* Este mtodo permite validar los parmetros del formulario HTML de la
* pgina capturaCancion.jsp
* @param mapping La instancia de ActionMapping, el mapa empleado para
* seleccionar esta clase de accin.
* @param request La solicitud HTTP que se est procesando.
* @return Regresa la lista de los errores de validaciones
*/
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errores = new ActionErrors();
Validador validador = new Validador();
// Si no hay ttulo
if(!validador.validaString(getTitulo()))
// Agrega el mensaje de error a la lista de errores
errores.add("titulo", new ActionMessage("errors.no.titulo"));
// Si no hay intrprete
if(!validador.validaString(getInterprete()))
// Agrega el mensaje de error a la lista de errores
errores.add("interprete", new ActionMessage("errors.no.interprete"));
// Si no hay autor de la letra
if(!validador.validaString(getAutorLetra()))
// Agrega el mensaje de error a la lista de errores
errores.add("autorLetra", new ActionMessage("errors.no.autorLetra"));
// Si no hay autor de la msica
ITSON
190
if(!validador.validaString(getAutorMusica()))
// Agrega el mensaje de error a la lista de errores
errores.add("autorMusica", new ActionMessage("errors.no.autorMusica"));
// Si no hay gnero
if(!validador.validaString(getGenero()))
// Agrega el mensaje de error a la lista de errores
errores.add("genero", new ActionMessage("errors.no.genero"));
// Si no hay lbum
if(!validador.validaString(getAlbum()))
// Agrega el mensaje de error a la lista de errores
errores.add("album", new ActionMessage("errors.no.album"));
// Si no hay disquera
if(!validador.validaString(getDisquera()))
// Agrega el mensaje de error a la lista de errores
errores.add("disquera", new ActionMessage("errors.no.disquera"));
// Si no hay duracin
if(!validador.validaString(getDuracion()))
// Agrega el mensaje de error a la lista de errores
errores.add("duracion", new ActionMessage("errors.no.duracion"));
// Si la duracin no es un entero
else if(!validador.validaInt(getDuracion()))
// Agrgalo el mensaje de error a la lista de errores
errores.add("duracion", new ActionMessage("errors.noInt.duracion"));
// Si no hay fecha
if(!validador.validaString(getFecha()))
// Agrgalo el mensaje de error a la lista de errores
errores.add("fecha", new ActionMessage("errors.no.fecha"));
// Si la fecha no es una Fecha
else if(!validador.validaFecha(getFecha()))
// Agrgalo el mensaje de error a la lista de errores
errores.add("fecha", new ActionMessage("errors.noFecha.fecha"));
return errores;
}
}
ITSON
Tutorial 7
191
ITSON
192
try {
int n = Integer.parseInt(s);
}
catch(NumberFormatException nfe) {
return false;
}
return true;
}
/**
* Valida si su parmetro representa una fecha en el formato dd/mm/aaaa.
* @param s Cadena a verificar
* @return True si la cadena representa una fecha en el formato dd/mm/aaaa,
* false en caso contrario.
*/
public boolean validaFecha(String s) {
try {
Fecha f = new Fecha(s);
}
catch(IllegalArgumentException iae) {
return false;
}
return true;
}
}
ITSON
Tutorial 7
193
Figura 7.15
3. Aparecer la segunda ventana del asistente para crear un archivo, mostrada en
la figura 7.16. En esta ventana estableceremos el nombre, ubicacin y ruta
relativa de la clase de accin.
a)
b)
c)
d)
e)
ITSON
194
Figura 7.16
Figura 7.17
ITSON
Tutorial 7
195
Figura 7.18
11. Edite la clase de accin ObtenCancionAction.java con el cdigo mostrado:
ObtenCancionAction.java
/*
* ObtenCancionAction.java
* @author mdomitsu
* @version
* Created on 2 de noviembre de 2006, 09:33 PM
*/
package acciones;
ITSON
196
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import
import
import
import
import
import
org.apache.struts.action.Action;
org.apache.struts.action.ActionForm;
org.apache.struts.action.ActionMapping;
org.apache.struts.action.ActionForward;
org.apache.struts.action.ActionMessage;
org.apache.struts.action.ActionErrors;
import objetosFormularios.CancionForm;
import delegadoNegocioBD.Delegado;
import objetosNegocio.Cancion;
/**
* Esta clase de Accin permite obtener una cancin del catlogo de canciones
* del programa AmanteMusica
*/
public class ObtenCancionAction extends Action {
// Constantes simblicas para las pginas JSP a las que se le pasar el
// control
private final static String INICIO = "inicio";
private final static String CANCION_EXISTENTE = "cancionExistente";
private final static String CANCION_INEXISTENTE = "cancionInexistente";
private final static String CANCION_NUEVA = "cancionNueva";
/**
* Este mtodo implementa la accin de obtener una cancin del
* catlogo de canciones.
* @param mapping La instancia de ActionMapping, el mapa empleado para
* seleccionar esta clase de accin.
* @param form El objeto de formulario (opcional) para esta solicitud.
* @param request La solicitud HTTP que se est procesando.
* @param response La respuesta HTTP que se est procesando.
* @throws java.lang.Exception Si no se pudo obtener la cancin
* @return "inicio" si se presion el botn Cancelar en la pgina
* "capturaClave.jsp". "cancionExistente" si la cancin existe en la tabla.
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HttpSession session = request.getSession();
Cancion cancion = new Cancion();
// Si el usuario presion el botn Cancelar en la pgina
// "capturaClave.jsp"
if(isCancelled(request)) {
// Restablece las propiedades del objeto de formulario CancionForm
// a cadenas vacas para que no muestren nada en la pgina
// capturaClave.jsp
((CancionForm)form).reset(mapping, request);
// pasa el control a la pgina "index.jsp"
return mapping.findForward(INICIO);
}
ITSON
Tutorial 7
197
ITSON
198
14. A este elemento de accin hay que agregarle los elementos <forward> que
especifiquen las pginas JSP a las que se les pasar el control dependiendo de
la ejecucin del mtodo execute() de la clase de accin. Esos elementos de
muestran en el siguiente cdigo.
<action-mappings>
...
<action path="/ObtenCancion"
type="acciones.ObtenCancionAction"
input="/"
name="CancionForm"
scope="session"
validate="false">
<forward name="cancelar"
path="/index.jsp" />
<forward name="cancionExistente"
path="/despliegaCancion.jsp" />
<forward name="cancionInexistente"
path="/error.jsp" />
<forward name="cancionNueva"
path="/capturaCancion.jsp" />
<exception type="java.lang.Exception"
key="errors.obtenCancion"
path="/error.jsp" />
</action>
...
</action-mappings>
ITSON
Tutorial 7
199
De la misma manera cre el resto de pginas JSP y clases de accin, configure los
diferentes elementos en el archivo struts-config.xml y agregue las entradas para
los mensajes de error en el archivo ApplicationResource.properties.
ITSON