Primeros Pasos Usando Struts Con Eclipse
Primeros Pasos Usando Struts Con Eclipse
Primeros Pasos Usando Struts Con Eclipse
Informacin general 1
Requisitos 1
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
http://www.sysdeo.com/eclipse/tomcatPlugin.html
como alternativa.
http://www.jamesholmes.com/struts/console/
com.jamesholmes.console.struts
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.
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).
2 de 17
Usted encontrar los archivos JAR en Project > WebRoot > WEB-INF > lib . Utilice SHIFT para
seleccionar mltiples archivos jar.
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.
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>
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".
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".
Nuestra Action leer datos de una base de datos, guardandolos en ActionForm. El JSP exhibir nuestros
datos.
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
6 de 17
Agregue dos constructores a la clase para fijar las propiedades en la inicializacin de la clase.
// Contructor
public Book(){ }
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.
/* 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.
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.
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
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> </td>
<td> </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>
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.
Action
ActionForm
Configuracin Struts
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();
12 de 17
public String toString() {
return book.toString();
}
}
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.
/* 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");
return mapping.findForward("showAdd");
/* 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.
Cree un JSP llamado bookAdd.jsp en la carpeta /WebRoot/jsp. El forward showAdd apuntar a esta
pgina.
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>
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>
Prueba de la aplicacin
Inicie jboss y convierta el proyecto a un archivo paquete. (Esto est explicado en el tutorial JBOSS IDE,
mencionado anteriormente).
http://localhost:8080/LibraryWeb/
17 de 17