You are on page 1of 27

Tutorial 7

Aplicaciones Web con Struts en


NetBeans 5.0
Creacin de un Proyecto
El desarrollo de una aplicacin Web con Struts en NetBeans 5.0 es similar al desarrollo
de una aplicacin Web con slo JSP visto en el Tutorial 6 Aplicaciones Web con
JSPs en NetBeans 5.0. Las diferencias estn en la creacin del proyecto, y en el uso
de los asistentes para crear las clases de accin y los objetos de formularios
(ActionForms). Lo primero que hay que hacer es crear un proyecto. Un proyecto nos
permite administrar los archivos con el cdigo fuente y compilado de una aplicacin.
Para crear un proyecto se sigue el siguiente procedimiento:
1. Del men principal de NetBeans 5.0, figura 7.1, seleccione la opcin File/New
Project , presione las teclas Ctrl+Maysculas+N o haga clic en el icono New
Project.

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

Manuel Domitsu Kono

174

Aplicaciones Web con Struts en NetBeans 5.0

Figura 7.2

Figura 7.3

ITSON

Manuel Domitsu Kono

Tutorial 7

a)
b)

c)
d)
e)
f)

g)

Aplicaciones Web con Struts en NetBeans 5.0

175

Establezca el nombre del proyecto (Project Name): Por ejemplo,


amanteMusicaStruts.
Establezca el directorio donde se almacenar el proyecto (Projet Location).
Por ejemplo: C:\Documents and Settings\mdomitsu\Mis
documentos\nbproject. En la lnea siguiente puede verse la ubicacin del
directorio en el que se almacenarn los archivos del proyecto: Project
Location, que es el directorio con el nombre del proyecto dentro del
directorio donde se ubica el proyecto. En este ejemplo es: C:\Documents
and Settings\mdomitsu\Mis
documentos\nbproject\amanteMusicaStruts.
Seleccione en la caja combinada: Source Structure: (estructura del cdigo
fuente:) la opcin Jakarta.
Seleccione en la caja combinada: Server: (Servidor:)la opcin Sun Java
System Application Server.
Seleccione en la caja combinada: J2EE Version: la opcin J2EE 1.4.
Asegrese que las casillas de seleccin: Set Source Level to 1.4
(Establezca el nivel del cdigo fuente a la versin 1.4) y Set as Main
Project (Haga que este proyecto sea el proyecto principal) estn
seleccionadas.
Presione el botn Next>.

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

Manuel Domitsu Kono

176

Aplicaciones Web con Struts en NetBeans 5.0

Figura 7.4

Figura 7.5

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

178

Aplicaciones Web con Struts en NetBeans 5.0

Figura 7.8

Figura 7.9
<a href="./Welcome.do">Struts Welcome Page</a>

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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>

El parmetro forward establece la pgina JSP a la que se le pasar el control,


que en este caso es la pgina welcomeStruts.jsp. La ubicacin del archivo
struts-config.xml es en la carpeta web/WEB_INF como se muestra en la
figura 7.10.

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

Manuel Domitsu Kono

180

Aplicaciones Web con Struts en NetBeans 5.0

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

Creacin de un elemento <forward>


global
Un elemento forward global es un elemento <forward> declarado dentro de un
elemento <global-forwards>. Establece un nombre lgico para la ruta de una
pgina JSP a la que cualquier clase de accin le puede pasar el control. Aqu
crearemos un elemento forward que le permita a cualquier clase de accin pasarle el
control a la pgina index.jsp. Para ello, modificaremos el elemento creado por el
asistente para crear aplicaciones Web de NetBeans para pasar el control de cualquier
clase de accin a la pgina welcomeStruts.jsp. En el archivo <strutsconfig.xml>, cambie el elemento <forward> del elemento <global-forwards>
de:
<global-forwards>
<forward name="welcome"
</global-forwards>

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

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

181

Creacin de una instancia de la Clase


ForwardAction
La clase ForwardAction nos permite pasarle el control de una pgina JSP a otra. Para
crear una instancia de esta clase slo necesitamos establecer la ruta relativa de la
instancia de la clase ForwardAction que atender a la solicitud y la ruta relativa de la
pgina JSP a la que se le pasar control. Esto se hace mediante un elemento
<action> dentro del elemento <action-mappings> en el archivo strutsconfig.xml.
En este tutorial crearemos dos instancias de la clase ForwardAction. La primera
para pasar el control de una pgina JSP a la pgina index.jsp. La ruta relativa de la
clase de accin ser: "/Inicio". La segunda para pasar el control de una una pgina
JSP a la pgina capturaClave.jsp. La ruta relativa de la clase de accin ser:
"/CapturaClave". Para ello, modificaremos el elemento <action> creado por el
asistente para crear aplicaciones Web de NetBeans para pasar el control de la pgina
index.jsp a la pgina welcomeStruts.jsp. En el archivo <strutsconfig.xml>, cambie el elemento <action> del elemento <action-mappings>
de:
<action-mappings>
<action path="/Welcome" forward="/welcomeStruts.jsp"/>
</action-mappings>

a
<action-mappings>
<action path="/Inicio" forward="/index.jsp"/>
<action path="/CapturaClave" forward="/capturaClave.jsp"/>
</action-mappings>

Ahora crearemos la pgina JSP capturaClave.jsp. Utilice el asistente de NetBeans


para crear la pgina y edtala para que tenga el siguiente cdigo:
capturaClave.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html:html>

ITSON

Manuel Domitsu Kono

182

Aplicaciones Web con Struts en NetBeans 5.0

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

Guarde la pgina JSP.

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

183

Creacin de un Objeto de Formulario


Un objeto de formulario (actionForm) es un JavaBean que hereda de la clase
org.apache.struts.action.ActionForm. Se emplea para capturar los datos de
un formulario HTML y pasrselos a una clase de accin. Aqu crearemos un objeto de
formulario llamado CancionForm.java para capturar la clave de una cancin del
formulario HTML en la pgina capturaClave.jsp y pasrsela a la clase de accin
obtenCancionAction.java. Aunque el objeto de formulario CancionForm.java
tiene otros atributos aparte de la clave, slo se llena la clave con el valor capturado en
el formulario.
Para crear un objeto de formulario se sigue el siguiente procedimiento:
1. Del men principal de NetBeans 5.0, seleccione la opcin Files/New File,
presione las teclas Ctrl+ N o haga clic en el icono New File, como se muestra en
la figura 7.11:

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)

Establezca el nombre de la clase (Class Name): En este caso,


CancionForm.
Establezca el nombre del paquete en que se crear (Package): En este
caso, objetosFormularios
Deje el resto de los campos a sus valores prestablecidos.
Presione el botn Finish.

4. Desaparecer el asistente para crear un nuevo archivo y aparecer el esqueleto


del objeto de formulario creado. figura 7.14.

ITSON

Manuel Domitsu Kono

184

Aplicaciones Web con Struts en NetBeans 5.0

Figura 7.12

Figura 7.13
ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

186

Aplicaciones Web con Struts en NetBeans 5.0

public class CancionForm extends org.apache.struts.action.ActionForm {


private String clave;
private String titulo;
private String interprete;
private String autorLetra;
private String autorMusica;
private String genero;
private String album;
private String disquera;
private String duracion;
private String fecha;
/**
* Constructor vaco
*/
public CancionForm() {
super();
}
/**
* Regresa la clave de la cancin
* @return La clave de la cancin
*/
public String getClave() {
return clave;
}
/**
* Establece la clave de la cancin
* @param clave La clave de la cancin
*/
public void setClave(String clave) {
this.clave = clave;
}
/**
* Regresa el ttulo de la cancin
* @return El ttulo de la cancin
*/
public String getTitulo() {
return titulo;
}
/**
* Establece el ttulo de la cancin
* @param titulo El ttulo de la cancin
*/
public void setTitulo(String titulo) {
this.titulo = titulo;
}
/**
* Regresa el intrprete de la cancin
* @return El intrprete de la cancin
*/
public String getInterprete() {
return interprete;

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

188

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

190

Aplicaciones Web con Struts en NetBeans 5.0

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

6. Guarde el objeto de formulario.


7. NetBeans crea una entrada en el archivo de configuracin struts-config
para el objeto de formulario usando un elemento <form-bean> dentro del
elemento <form-beans> como se muestra:
<form-beans>
<form-bean name="CancionForm"
type="objetosFormularios.CancionForm"/>
</form-beans>

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

191

8. Abra el archivo ApplicationResource.properties (se encuentra en la


carpeta: src\com\amanteMusicaStruts\struts) las entradas para cada
uno de los mensajes de errores creados en el mtodo validate() del objeto de
formulario CancionForm.java:
errors.no.titulo=Falt el ttulo
errors.no.interprete=Falt el intrprete
errors.no.autorLetra=Falt el autor de la letra
errors.no.autorMusica=Falt el autor de la msica
errors.no.genero=Falt el gnero
errors.no.album=Falt el lbum
errors.no.disquera=Falt la disquera
errors.no.duracion=Falt la duracin
errors.noInt.duracion=La duracin debe ser un entero
errors.no.fecha=Falt la fecha
errors.noFecha.fecha=La fecha debe ser dd/mm/aaaa

9. Utilice el asistente de NetBeans para crear la clase Validador.java en el


paquete utils y edtala para que tenga el siguiente cdigo:
Validador.java
/*
* Validador.java
*
* Created on 14 de noviembre de 2006, 03:25 PM
*
* @author mdomitsu
*/
package utils;
import objetosServicio.Fecha;
/**
* Esta clase prove de mtodos para validar que las cadenas de sus
* parmetros representan a datos de los tipos especificados por el mtodo
*/
public class Validador {
/**
* Valida si su parmetro es una cadena no vaca.
* @param s Cadena a verificar
* @return True si la cadena no es vaca o nula, false en caso contrario.
*/
public boolean validaString(String s) {
return s != null && s.length() > 0;
}
/**
* Valida si su parmetro es un entero.
* @param s Cadena a verificar
* @return True si la cadena representa un entero, false en caso contrario.
*/
public boolean validaInt(String s) {

ITSON

Manuel Domitsu Kono

192

Aplicaciones Web con Struts en NetBeans 5.0

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

Creacin de una Clase de Accin


Una clase de accin es una clase que hereda de la clase
org.apache.struts.action.Action. Se emplea ejecutar una tarea de la lgica
de los negocios en respuesta a una solicitud del cliente. Al concluir su tarea le pasa el
control a una pgina para mostrar los resultados. Aqu crearemos una clase de accin
llamada ObtenCancionForm.java para obtener una cancin de la tabla canciones
de la base de datos musica.
Para crear una clase de accin se sigue el siguiente procedimiento:
1. Del men principal de NetBeans 5.0, seleccione la opcin Files/New File,
presione las teclas Ctrl+ N o haga clic en el icono New File, como se muestra en
la figura 7.11:
2. Aparecer la primera ventana del asistente para crear un nuevo archivo, figura
7.15. 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 Action en el recuadro File Types:, y luego presionaremos el
botn Next>.

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

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)

Establezca el nombre de la clase (Class Name): En este caso,


ObtenCancionAction.
Establezca el nombre del paquete en que se crear (Package): En este
caso, acciones.
Establezca la ruta relativa de la clase de accin: En este caso:
/ObtenCancion
Deje el resto de los campos a sus valores prestablecidos.
Presione el botn Next.

4. Aparecer la tercera ventana del asistente para crear un archivo, mostrada en la


figura 7.17. En esta ventana seleccionaremos el nombre del objeto de formulario
asociado a esta clase de accin, su mbito, si se har validacin de los datos y
la pgina a la que se le pasar el control si hay errores de validacin.
a) Asegrese que la casilla de verificacin: Use Objeto de formulario (Use
ActionForm Bean) este seleccionada.
b) Seleccione el nombre del objeto de formulario (ActionForm bean Name:), en
este caso CancionForm.

ITSON

Manuel Domitsu Kono

194

Aplicaciones Web con Struts en NetBeans 5.0

Figura 7.16

Figura 7.17

ITSON

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

195

c) Establezca el nombre de la clase (Class Name): En este caso,


ObtenCancionAction.
d) Deje sin modificar el campo de entrada para el nombre de la pgina a la que
se le pasar el control en caso de errores de validacin (Input Action:)
e) Asegrece que el mbito del objeto de formulario (Scope:) sea Session.
f) Desmarque la casilla de verificacin: Valide el objeto de formulario (Validate
ActionForm Bean).
g) Deje el resto de los campos a sus valores prestablecidos.
h) Presione el botn Finish.
10. Desaparecer el asistente para crear un nuevo archivo y aparecer el esqueleto
de la clase de accin creada. figura 7.18.

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

Manuel Domitsu Kono

196

Aplicaciones Web con Struts en NetBeans 5.0

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

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

197

// Obten la clave de la cancin enviada por la pgina "capturaClave.jsp"


String clave = ((CancionForm)form).getClave();
// Crea el objeto para acceder a la base de datos
Delegado delegado = new Delegado();
// Objeto para recibir la cancin obtenida
Cancion cancionObtenida;
// Obten la cancin del catlogo de canciones
cancionObtenida = delegado.obten(new Cancion(clave));
// Si la cancin existe en la base de datos
if(cancionObtenida != null) {
// Copia sus atributos al bean cancion
cancion.setClave(cancionObtenida.getClave());
cancion.setTitulo(cancionObtenida.getTitulo());
cancion.setInterprete(cancionObtenida.getInterprete());
cancion.setAutorLetra(cancionObtenida.getAutorLetra());
cancion.setAutorMusica(cancionObtenida.getAutorMusica());
cancion.setGenero(cancionObtenida.getGenero());
cancion.setAlbum(cancionObtenida.getAlbum());
cancion.setDisquera(cancionObtenida.getDisquera());
cancion.setDuracion(cancionObtenida.getDuracion());
cancion.setFecha(cancionObtenida.getFecha());
// Almacena el bean cancion como una variable de mbito de sesin.
// El nombre de la variable es cancion y est disponible para las
// pginas jsp usando la accin <jsp:useBean>
session.setAttribute("cancion", cancion);
// Restablece las propiedades del objeto de formulario.
((CancionForm)form).reset(mapping, request);
// Pasa el control a la pgina "despliegaCancion.jsp"
return mapping.findForward(CANCION_EXISTENTE);
}
// Si la cancin no existe
// Si la tarea seleccionada es "Agregar Cancin"
// pasa el control a la pgina "capturaCancion.jsp"
if(session.getAttribute("tareaSeleccionada").equals("agregarCancion"))
return mapping.findForward(CANCION_NUEVA);
// Si la tarea seleccionada es "Eliminar Cancin"
// Crea una lista de errores
ActionErrors errores = new ActionErrors();
// Agrgale un mensaje de error
errores.add(ActionErrors.GLOBAL_MESSAGE,
new ActionMessage("errors.cancionInexistente"));
// Guarda la lista de errores en el objeto request para que este
// disponible para la pgina a la que se le va a pasar el control
saveErrors(request, errores);
// Restablece las propiedades del objeto de formulario CancionForm

ITSON

Manuel Domitsu Kono

198

Aplicaciones Web con Struts en NetBeans 5.0

// a cadenas vacas para que no muestren nada en la pgina


// capturaClave.jsp
((CancionForm)form).reset(mapping, request);
return mapping.findForward(CANCION_INEXISTENTE);
}
}

12. Guarde la clase de accin.


13. NetBeans crea una entrada en el archivo de configuracin struts-config para la
clase de accin usando un elemento <action> dentro del elemento <actionmappings> como se muestra:
<action-mappings>
...
<action input="/"
name="CancionForm"
path="/ObtenCancion"
scope="session"
type="acciones.ObtenCancionAction"
validate="false"/>
...
</action-mappings>

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

Manuel Domitsu Kono

Tutorial 7

Aplicaciones Web con Struts en NetBeans 5.0

199

15. Agregue al archivo ApplicationResource.properties las entradas para


cada uno de los mensajes de errores creados en la clase de accin
ObtenCancionAction.java y en el parmetro key del elemento
<exception> del elemento <action>:
errors.cancionInexistente=Error, la cancin no existe
errors.obtenCancion=Error al leer el catlogo de canciones.

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

Manuel Domitsu Kono

You might also like