Está en la página 1de 17

Tabla de contenido

Primeros pasos usando struts y eclipse 1

Informacin general 1

Requisitos 1

Instalacin de la consola struts 2

Crear un proyecto web 2

Agregando soporte struts 2

Crear una pgina de bienvenida por defecto 4

Global Action Forwards y Action Mapping 5

Caso de uso: lista de libros 6

Caso de uso: Agregar, editar y borrar datos 15

Cambios a la lista de libros JSP 21

Prueba de la aplicacin 22

Requisitos
Requerimientos para la instalacin de JBOSS IDE, cuando est utilizando JBOSS como servidor de
aplicacin. Una tutorial de cmo crear y distribuir proyectos web con la JBOSS IDE se puede encontrar
aqu.

http://www.laliluna.de/webprojects-eclipse-jbosside-tutorial-en.html

Cuando se utiliza Tomcat, se puede utilizar el plugin de eclipse

http://www.sysdeo.com/eclipse/tomcatPlugin.html

como alternativa.

Instalacin de la consola struts


Descargue los fuentes del website

http://www.jamesholmes.com/struts/console/

Descomprima el archivo y copie el directorio

com.jamesholmes.console.struts

a la carpeta de plugins de eclipse

Inicie eclipse y eso es todo.

Cree un proyecto web


La creacin de un proyecto web con la IDE JBOSS se explica en este tutorial

http://www.laliluna.de/webprojects-eclipse-jbosside-tutorial-en.html

el cul fue mencionado en los requisitos. Desarrolle un proyecto web como se explica all.

Agregando soporte struts


Por ahora el proyecto es un proyecto normal de JEE, as que necesitamos agregar las capacidades de los
struts (bibliotecas, archivos xml...). La manera ms fcil es copiar un poryecto struts en blanco en su
proyecto.

Usted puede descargar un proyecto en blanco aqu.

http://www.laliluna.de/assets/tutorials/struts-blanc-project-1.2.zip

1 de 17
http://www.laliluna.de/assets/tutorials/struts-blanc-project-1.2.zip

Descomprima el contenido del proyecto struts en blanco en el espacio de trabajo de eclipse donde esta su
proyecto.

Actualice el proyecto en el explorador del paquete presionando el botn derecho del ratn - > el comando
"refresh" (Actualizar).

Su proyecto ahora se parece el siguiente.

Agregando las bibliotecas de struts


Ahora usted debe agregar las bibliotecas a su classpath. Botn derecho sobre el proyecto y seleccione
"properties" en el men de contexto.

Seleccione "Java Build Path" y "Add jars" en la lengeta de las bibliotecas.

2 de 17
Usted encontrar los archivos JAR en Project > WebRoot > WEB-INF > lib . Utilice SHIFT para
seleccionar mltiples archivos jar.

Las bibliotecas de struts ahora aparecern en el explorador de paquete.

Cree una pgina de bienvenida por defecto


Bien, ahora deseamos crear una pgina por defecto. Botn derecho (s otra vez) en la carpeta WebRoot en
el proyecto y elija ?New? > JSP. Si usted no puede encontrar esta opcin, seleccione "other" y entonces
JSP.

Usted debe tener instalado el JBOSS IDE!

Cree un JSP nuevo en el directorio WebRoot.

Usted encontrar el archivo index.jsp en la carpeta WebRoot del proyecto. Debemos agregar las bibliotecas
de etiqueta de struts a nuestro JSP. Necesitamos bibliotecas de etiqueta (Tag Libraries)para utilizar
etiquetas de struts en un JSP. En este caso necesitamos solamente la biblioteca de la lengeta de la lgica
de struts. Cambie su contenido de JSP al siguiente.
<% @page contentType="text/html" %>
<% @page language="Java" %>
<% @taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>

<logic:forward name="welcome"/>

La etiqueta logic:forward hace que Struts busque una redireccin (forward) en el archivo de configuracin.
Cuando no se puede encontrar esta redireccin occure una excepcin. Explicamos la action forward en el
captulo siguiente.

Cree un segundo JSP index.jsp en el directorio/WebRoot/jsp.


Cambie el JSP a lo siguiente:

3 de 17
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
<head>
<html:base />
<title>index.jsp</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="Esta es mi pgina">
</head>
<body>
Bienvenido!
<br>
<html:link action="bookList">Mostrar lista de libros</html:link>
</body>
</html:html>

Global Action Forwards y Action Mappings


Qu es una accin de redireccin (action forward)?
Una accin de redireccin se puede utilizar para redireccionar a un jsp o a un mapa de accin (action
mapping). Hay dos acciones de redireccin diferentes. La redireccin de accin global y la de accin local.
Usted puede tener acceso a una redireccin de accin global en cada jsp o en la clase Action. Una
redireccin de accin local solamente puede ser accedida por la clase asignada.

Qu es un mapa de accin (action mapping)?


El mapa de accin es el corazn de struts. Maneja todas las acciones entre la aplicacin y el usuario. Usted
puede definir qu accin ser ejecutada creando un mapa de accin (Action Mapping).

El diagrama le muestra, cmo el servidor de aplicacin maneja la peticin del index.jsp o una accin no
mapeada.

En el primer paso creamos una nueva accin mapeada. Abra el archivo struts-config.xml de la
configuracin de struts, que est situado en WebRoot/WEB-INF. Se abre la consola de struts. (si no, botn
derecho sobre struts-config.xml y seleccine "open with".

Marque Action Mapping y y seleccione Add.

Escriba /default como Path y seleccione el tipo de accin Forward. Usaremos como pgina de bienvenida
/jsp/default.jsp

4 de 17
En el paso siguiente crearemos la accin global forward. Marque "Global Forwards", seleccione "add".

Elija /default.do como Path, que es la accin que especificamos antes.

Caso de uso: Listar los libros


Una accin de struts siempre hace una cierta lgica del negocio y guarda el resultado en una clase del tipo
ActionForm. Los datos del ActionForm se pueden mostrar en un JSP.

Nuestra Action leer datos de una base de datos, guardandolos en ActionForm. El JSP exhibir nuestros
datos.

Crear una clase "Libro" (?Book?)


Cree una clase nueva ?Libro? en el paquete de.laliluna.tutorial.library.

5 de 17
La clase Libro representa un libro con las propiedades: id, autor, ttulo y disponibilidad.(id, author, title y
available)
Cree cuatro variables.

Cree un getter y un setter para cada una de las variables. Botn derecho en su clase, Source > Generate
Getters and Setters

Elija seleccionar todo (Select All) y Last Method en Insertion Point

6 de 17
Agregue dos constructores a la clase para fijar las propiedades en la inicializacin de la clase.

// Contructor
public Book(){ }

// Contructor para propiedades iniciales


public Book(long id, String author, String title, boolean available) {
this.id = id;
this.author = author;
this.title = title;
this.available = available;
}

Eso es todo para nuestra clase libro!

Crear un form bean, action form y jsp


Cree una nueva sub clase de ActionForm. El ActionForm contendr nuestros libros para exhibirlos en el
JSP.

7 de 17
Abra struts-config.xml y agregue un nuevo form bean con la consola de struts. El tipo es nuestra ltima
clase creada.

Cambie el cdigo fuente de la clase action form.


Abra el archivo BookListForm.java y cambie el cdigo fuente:

public class BookListForm extends ActionForm {

private Collection books;

/* lalinuna.de 02.11.2004
* obtiene la collection de libros
*/
public Collection getBooks() {
return books;
}
/* lalinuna.de 02.11.2004
* establece la collection de libros
*/
public void setBooks(Collection books) {
this.books = books;
}
/* lalinuna.de 02.11.2004
* limpia la collection de libros
*/
public void reset(ActionMapping arg0, HttpServletRequest arg1) {
books = new ArrayList();
}
}

En nuestra clase hemos definido cada vez una coleccin de libros y los mtodos de acceso (getters y
setters).El mtodo reset es llamado por struts cada vez que un formulario es inicializado. Cuando su
estructura es requerida, ste es en cada peticin.

Crear un Action Mapping y una Action Class.


Cree una clase BookListAction. Esta clase carga los libros de la base de datos y los guarda en
BookListForm.

8 de 17
Cambie el cdigo fuente de la clase Action.
Abra la clase bookListAction e implemente el mtodo execute desde la super clase ActionForm.
La llamada siguiente mapping.findForward("showList") busca un forward con el nombre "showList" en la
declaracin del Action Mapping el declaracin y se redirecciona.
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
BookListForm bookListForm = (BookListForm) form;

/* lalinuna.de 03.11.2004
* inicia la clase SimulateDB y pone algunos datos
*/
SimulateDB simulateDB = new SimulateDB();
bookListForm.setBooks(simulateDB.getAllBooks(request.getSession()));

return mapping.findForward("showList");
}

Clase SimulateDB
No utilizaremos una base de datos verdadera en este tutorial sino una simulacin de la base de datos. Copie
el archivo SimulateDB.java del cdigo fuente que proporcionamos como una descarga arriba del paquete
de.laliluna.tutorial.library.

Configuracin struts para la lista de libros


Cree una nueva Action Mapping con la consola de struts. La ruta debe comenzar con un /, el tipo es la
accin que acabamos de crear.

9 de 17
Marque en Action Mapping en la consola Struts para acceder a la configuracin avanzada.

Cree un Forward pata la Action Mapping del JSP con el nombre showList

Crear la lista de libros JSP


Cree un nuevo JSP en la carpeta /jsp/ , nombrelo bookList.jsp .
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>

10 de 17
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<html>
<head>
<title>Show book list</title>
</head>
<body>
<table border="1">
<tbody>
<%-- set the header --%>
<tr>
<td>Author</td>
<td>Book name</td>
<td>Available</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<%-- check if book exists and display message or iterate over books --%>
<logic:empty name="bookListForm" property="books">
<tr>
<td colspan="5">No books available</td>
</tr>
</logic:empty>
<logic:notEmpty name="bookListForm" property="books">
<logic:iterate name="bookListForm" property="books" id="book">
<tr>
<%-- print out the book informations --%>
<td><bean:write name="book" property="author" /></td>
<td><bean:write name="book" property="title" /></td>
<td><html:checkbox disabled="true" name="book" property="available" />
</td>
<%-- print out the edit and delete link for each book --%>
<td><html:link action="bookEdit.do?do=editBook" paramName="book"
paramProperty="id" paramId="id">Edit</html:link></td>
<td><html:link action="bookEdit.do?do=deleteBook" paramName="book"
paramProperty="id" paramId="id">Delete</html:link></td>
</tr>
</logic:iterate>
</logic:notEmpty>

<%-- end interate --%>


</tbody>
</table>
</body>
</html>

La marca <logic:iterate> recorre la coleccin de libros del form bean bookListForm


Con la marca <logic:iterate> se tiene acceso a las propiedades de un libro. La marca <bean:write> muestra
la propiedad (author, title) de la posicin actual.
<html:checkbox> crea una casilla de verificacin.

Esto es produccin fuuuhh, tenemos nuestro form Bean con una Action Form Class, nuestro Action
Mapping con su Action Class y JSP, y los servicios necesarios activos.

Muy bien. Tenemos que crear un action class que gaurde los datos en un action form. Para mostrar la lista
de libros hemos creado un JSP que utiliza los datos en action form. Fcil, no?.

Si quiere puede hacer una prueba de la aplicacin ahora. Mire al final del tutorial como probarla.

Caso de uso: Agregar, editar y borrar datos


En la seccin siguiente agregamos las funcionalidades de Agregar, Editar y Borrar datos. El proceso es el
mismo:

Action

ActionForm

Configuracin Struts

Nuevo form bean


Cree una nueva clase como action form en el paquete de.laliluna.tutorial.library.form . Denominelo
BookEditForm.

Agregue una nueva instancia de libro (Book).


Book book = new Book();

Genere los getters y setters. Luego herede todos los mtodos de la clase Book.

11 de 17
El cdigo fuente debera ser como este:
public class BookEditForm extends ActionForm {
Book book = new Book();

public Book getBook() {


return book;
}
public void setBook(Book book) {
this.book = book;
}
public boolean equals(Object arg0) {
return book.equals(arg0);
}
public String getAuthor() {
return book.getAuthor();
}
public long getId() {
return book.getId();
}
public String getTitle() {
return book.getTitle();
}
public int hashCode() {
return book.hashCode();
}
public boolean isAvailable() {
return book.isAvailable();
}
public void setAuthor(String author) {
book.setAuthor(author);
}
public void setAvailable(boolean available) {
book.setAvailable(available);
}
public void setId(long id) {
book.setId(id);
}
public void setTitle(String title) {
book.setTitle(title);
}
public String toString() {

12 de 17
public String toString() {
return book.toString();
}
}

Ahora podemos acceder a los atributos de libro en el action form.

Crear la action class


Cree una nueva clase. Esta vez la clase no es una sub clase de Action pero s de
org.apache.struts.DispatchAction.

Un DispatchAction no ejecuta mtodos pero puede tener diferentes mtodos dependiendo del parmetro.
Con el parmetro podemos decidir si el mtodo llamado es crear/editar/borrar.

Cdigo fuente de la clase DispatchAction


Abra el archivo bookEditAction.java. Agregue los mtodos:
/**
* Method editBook
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward editBook(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
BookEditForm bookEditForm = (BookEditForm) form;

/* lalinuna.de 04.11.2004
* obtiene el id del libro de la solicitud
*/
long id = Long.parseLong(request.getParameter("id"));

/* lalinuna.de 04.11.2004
* inicia la clase SimulateDB y obtiene un libro por id
*/
SimulateDB simulateDB = new SimulateDB();
bookEditForm.setBook(simulateDB.loadBookById(id, request.getSession()));

return mapping.findForward("showEdit");

13 de 17
}

El mtodo editBook obtiene el parmetro id de la solicitud y lee el libro segn el id desde la base de datos
simulada. El forward showEdit se refiere a la pgina bookEdit.jsp
/**
* Method deleteBook
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward deleteBook(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
BookEditForm bookEditForm = (BookEditForm) form;

/* lalinuna.de 04.11.2004
* obtiene el id del libro de la solicitud
*/
long id = Long.parseLong(request.getParameter("id"));

/* lalinuna.de 04.11.2004
* inicia la clase SimulateDB y borra un libro segn el id
*/
SimulateDB simulateDB = new SimulateDB();
simulateDB.deleteBookById(id, request.getSession());

return mapping.findForward("showList");

El mtodo deleteBook obtiene el id de la solicitud y elimina el libro de la base de datos simulada. El


forward showList actualiza la lista de libros con la pgina bookList.jsp
/**
* Method addBook
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward addBook(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
BookEditForm bookEditForm = (BookEditForm) form;

return mapping.findForward("showAdd");

El mtodo addBook se refiere a la pgina bookAdd.jsp


/**
* Method saveBook
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward saveBook(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
BookEditForm bookEditForm = (BookEditForm) form;

/* lalinuna.de 04.11.2004
* inicia la clase SimulateDB y obtiene los datos segn id
*/
SimulateDB simulateDB = new SimulateDB();
simulateDB.saveToDB(bookEditForm.getBook(), request.getSession());

return mapping.findForward("showList");
}

El ltimo mtodo obtiene el libro del form bean bookEditForm y lo guarda en la base de datos simulada.
Luego la aplicacin muestra la lista de libros.

Configuracin Struts
Cree un nuevo form bean con la consola struts.

14 de 17
Cree un nuevo action mapping. Como parmetro especifique do. Este parmetro es necesario para el
DispatchAction.

Cambie el Action.

Cree tres forwards en la lengeta ?forward tab?. Uno para el JSP que edita, otro para el JSP que agrega y
otro para el que muestra la lista de libros.

El ltimo forward no ir a ningun JSP pero s a otra accin.

Cree un JSP llamado bookAdd.jsp en la carpeta /WebRoot/jsp. El forward showAdd apuntar a esta
pgina.

Cambie el cdigo fuente del JSP


Abra el archivo bookAdd.jsp y agregue el siguiente cdigo.

15 de 17
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>

<html>
<head>
<title>Agregar un libro</title>
</head>
<body>
<%-- crear un formulario html --%>
<html:form action="bookEdit">
<%-- Mostrar los datos del formulario --%>
<table border="1">
<tr>
<td>Autor:</td>
<td><html:text property="author" /></td>
</tr>
<tr>
<td>Ttulo:</td>
<td><html:text property="title" /></td>
</tr>
<tr>
<td>Disponible:</td>
<td><html:checkbox property="available" /></td>
</tr>
<tr>
<td colspan="2">
<html:submit>Guardar</html:submit>
</td>
</tr>
</table>
<%-- fijar el parmetro para dispatch action --%>
<html:hidden property="do" value="saveBook" />
</html:form>
</body>
</html>

La etiqueta <html:form> crea un nuevo formulario HTML y se refiere con el parmetro action=?bookEdit?
al action mapping. La etiqueta <html:text> crea un campo de texto con la propiedad autor del libro.
<html:hidden> es un campo oculto con el nombre do. Necesitamos este campo oculto, porque le dice a la
clase dispatch action que mtodo ser llamado.

Abra el archivo bookEdit.jsp. Puede usar el cdigo del archivo bookAdd.jsp y cambiar las siguientes lneas.
<title>Editar un libro</title>

Agregue la siguiente lnea <html:hidden property="do" value="saveBook" />


<%-- Campo oculto que contiene el id del libro --%>
<html:hidden property="id" />

Cambios a la lista de libros JSP


Abra el archivo bookList.jsp y cambie el cdigo fuente:

<%@ page language="java"%>


<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%>
<html>
<head>
<title>Show book list</title>
</head>
<body>
<table border="1">
<tbody>
<%-- set the header --%>
<tr>
<td>Author</td>
<td>Book name</td>
<td>Available</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<%-- check if book exists and display message or iterate over books --%>
<logic:empty name="bookListForm" property="books">
<tr>

16 de 17
<tr>
<td colspan="5">No books available</td>
</tr>
</logic:empty>
<logic:notEmpty name="bookListForm" property="books">
<logic:iterate name="bookListForm" property="books" id="book">
<tr>
<%-- print out the book informations --%>
<td><bean:write name="book" property="author" /></td>
<td><bean:write name="book" property="title" /></td>
<td><html:checkbox disabled="true" name="book" property="available" />
</td>
<%-- print out the edit and delete link for each book --%>
<td><html:link action="bookEdit.do?do=editBook" paramName="book"
paramProperty="id" paramId="id">Edit</html:link></td>
<td><html:link action="bookEdit.do?do=deleteBook" paramName="book"
paramProperty="id" paramId="id">Delete</html:link></td>
</tr>
</logic:iterate>
</logic:notEmpty>

<%-- print out the add link --%>


<tr>
<td colspan="5"><html:link action="bookEdit.do?do=addBook">Add a new book</html:link>
</td>
</tr>
<%-- end interate --%>
</tbody>
</table>
</body>
</html>

Ahora, hemos finalizado toda la codificacin y podemos probar la aplicacin.

Prueba de la aplicacin
Inicie jboss y convierta el proyecto a un archivo paquete. (Esto est explicado en el tutorial JBOSS IDE,
mencionado anteriormente).

Llame al proyecto en su navegador favorito:

http://localhost:8080/LibraryWeb/

17 de 17

También podría gustarte