Crud es la abreviatura de crear, leer, actualizar y eliminar, y es un microcosmos de aplicaciones ordinarias. Si domina la redacción de un marco, significa que puede usar el marco para crear aplicaciones ordinarias. Por lo tanto, cuando usa el nuevo marco para desarrollar aplicaciones OLTP (procesamiento de transacciones en línea), primero estudiará cómo escribir CRUD. Esto es similar a la forma en que a la gente le gusta escribir "Hello World" cuando aprende nuevos lenguajes de programación.
Este artículo está destinado a describir el desarrollo de RCUD en Struts 2, por lo que en aras de la simplicidad y la facilidad de comprensión, no pasaré tiempo en las operaciones de la base de datos. En cambio, una tabla hash (mapa hash) que simula la base de datos.
Implementación específica
Primero, echemos un vistazo al DAO "falso" (objeto de acceso a datos, objeto de acceso a datos), el código es el siguiente:
paquete tutorial.dao; import java.util.collection; import java.util.concurrent.concurrenthashmap; import java.util.concurrent.concurrentmap; tutorial de importación de importación. Bookdao (); data = nuevo concurrenthashmap <string, book> (); data.put ("978-0735619678", nuevo libro ("978-0735619678", "Código completo, segunda edición", 32.99)); Data.put ("978-0596007867", Nueva Libro ("978-0596007867", "The Art of Project Management", 35.96)); data.put ("978-02016333610", nuevo libro ("978-0201633610", "Patrones de diseño: Elementos de software reutilizable orientado a objetos", 43.19)); Data.put ("978-05965241", Libro ("978-0596527341", "Arquitectura de información para la red mundial: Diseño de sitios web a gran escala", 25.19)); data.put ("978-0735605350", nuevo libro ("978-0735605350", "Estimación de software: Demystifying the Black Art", 25.19));});} {} public static estaticdao getInstance () {return instance;} public colección <Book> getBooks () {return data.values ();} public libro de libro getBook (string isbn) {return data.get (isbn);} public void ttorebook (book book) {data.put (book.getisbn (), libro);} Public void remoid book (string isbn) {data.remove (isbn);} public void removeBooks (String [] isbn) {for (string isbn: isbn) {data.remove (isbn);}}}Listado 1 SRC/Tutorial/Dao/Bookdao.Java
Creo que no se requiere explicación para el código anterior. Utilizo la estructura de datos concurrentes para almacenar objetos de libros, que es principalmente para facilitar la recuperación y el almacenamiento de objetos de libros; Además, también establecí la variable de datos para que sea estademente exclusiva para simular la base de datos de la aplicación.
El siguiente es la clase de libro de modelos de datos, el código es el siguiente:
paquete tutorial.model; public class Book {private string isbn; private string title; private doble precio; libro público () {} libro público (cadena isbn, título de cadena, precio doble) {this.isbn = isbn; this.title = title; this.price = precio;} public String getIsbn () {return isbn;} public void void (string isbn) isbn;} public doble getPrice () {return Price;} public void setPrice (doble precio) {this.price = precio;} public String gettitle () {return title;} public void settitle (title de cadena) {this.title = title;}}}Listado 2 SRC/Tutorial/Model/Book.java
La clase de libro tiene tres atributos: ISBN, título y precio representan el número, el nombre y el precio del libro, respectivamente. El número se utiliza para identificar de manera única el libro (equivalente a la clave principal en la base de datos).
Luego, echemos un vistazo al código de la clase de acción:
paquete tutorial.action; import java.util.collection; importación de importación.dao.bookdao; importador de importación.model.book; import com.opensymphony.xwork2.ActionSupport; public class BookAction extiende ActionSupport {private estático final de serie Long -Long) Colección <Book> libros; private bookdao dao = bookdao.getInstance (); libro público getBook () {return book;} public void setbook (book book) {this.book = book;} public String getisbn () {return isbn;} public void setisBn (string isbn) {this.isbn = isbn;} string [] getSbns () isbn;} public void setisbnns (string [] isbnns) {this.isbns = isbnns;} colección pública <Book> getBooks () {return books;} public void setbooks (colección <book> books) {this.books = books;} public string load () {book = Dao.getBook (isbn); dao.getBooks (); return éxito;} public string store () {dao.storeBook (libro); return strate;} public string remove () {if (null! = isbn) {dao.removeBook (isbn);} else {dao.removeBooks (isbns);} suctar;}}}Listado 3 SRC/Tutorial/Action/BookAction.java
En la clase BookAction, el atributo ISBN se utiliza para representar el número de libros que se editarán o eliminarán, el atributo ISBNS se utiliza para representar la matriz de libros que se eliminarán, el libro de atributos representa el libro actual y los libros de atributos representan la lista de libros actual. BookAction tiene cuatro métodos de acción, carga, lista, almacenamiento y eliminación, es decir, Crud se implementa en BookAction.
El siguiente es el código de configuración de acción:
<? xml versión = "1.0" encoding = "utf-8"?> <! DocType Struts public "-// Apache Software Foundation // Dtd Struts Configuration 2.0 // en" "http://struts.apache.org/dtds/struts-2.0.dtdd"> <truts> <pack name = "Struts2_cRudeM" Extends = "Struts-Default" Namespace = "/Book"> <Action Name = "List" Method = "List"> <Result> list.jsp </resultado> </Action> <Action name = "edit" Method = "Load"> <Result> edit.jsp </resultado> </Action> <Action Name = "Store" Method = "Store"> <Result Type = "Redirect"> LIST.CACTION <ACTION <Caction </Result </Result </Result> name = "eliminar" método = "eliminar"> <resultado type = "redirect"> list.action </resultado> </action> </paquete> </truts>
Listado 4 SRC/Struts.xml
En la configuración anterior, utilicé cuatro definiciones de acción. Todos están dentro del espacio de nombres "/Libro". In this way, I can call the four Action methods of BookAction for CRUD operations by "http://localhost:8080/Struts2_CRUD/Book/List.action", "http://localhost:8080/Struts2_CRUD/Book/Edit.action", "http://localhost:8080/Struts2_CRUD/Book/Store.action" and "http: // localhost: 8080/struts2_crud/book/remove.action". Por supuesto, esto es solo una preferencia personal. Solo puede definir una acción (suponiendo que su nombre sea "libro"), y luego acceder a ella a través de "http: // localhost: 8080/struts2_crud/book! List.action". Para obtener más detalles, consulte "Explicación de acción de Struts 2.0". Además, uso el resultado de la redirección de tipo (redirección) ya que quiero volver a la página de la lista después de terminar la edición o eliminación.
Aquí está el código para la página de la lista:
< %@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8" %> < %@ taglib prefix = "s" uri = "/struts-tags" %> <! Doctype html público "-// w3c // dttd xhtml 1.0 transitional/ "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns =" http://www.w3.org/1999/xhtml "> <shead> <title> Lista de la lista </title> <syle type =" text/css " negro sólido; border-colapso: colapso;} tabla thead tr th {borde: 1px sólido negro; relleno: 3px; background-color: #ccccccc;} table tbody td {border: 1px sólido negro; relleno: 3px;} </style> </head> <body> <h2> LISTA LISTA </h H2> <s: formar acción = "TEMA" TEBLE "</head> </head> <body> <h2> LISTA DE LIBRADA </h H2> <S: Form Action =" Eliminar ". CellPacing = "0"> <thead> <tr> <th> select </th> <th> isbn </th> <th> title </th> <th> precio </th> <th> operación </th> </tr> </thead> <tbody> <s: iterator value = "books"> <tr> <tr> <Td> <input type = "chequebox" name = "isbn" value "valor" s: stery stery "books"> <tr> <tr> <Td> <input type = "checkbox" name = "isbn" value "valor" s: 's: books "books"> <tr> <tr> <Td> <input type = "chequebox" value = "isbn" /> ' /> </td> <td> <s: propiedad value = "isbn" /> /> </td> <td> $ <s: propiedad valor = "precio" /> </td> <td> <a href =' <s: url action = "editar"> <s: param name = "esbn" value = "isbn" " /> </s: url> '> editar </a> <a href =' <s: url action = "eliminar"> <s: param name = "isbn" value = "isbn"/> </s: url> '> delete </a> </td> </tr> </s: iterator> </bby> </aB href = "edit.jsp"> Agregar libro </a> </s: form> </body> </html>Listado 5 webcontent/book/list.jsp
En el código anterior, vale la pena señalar que en la etiqueta <S: Form>, configuré la propiedad del tema en "simple", para que pueda cancelar su diseño de tabla predeterminado. Anteriormente, algunos amigos me preguntaron: "¿Qué debo hacer si no quiero que se coloque el botón Enviar a la derecha?" La sudoración anterior es una de las respuestas. Por supuesto, es mejor personalizar un tema y aplicarlo a todo el sitio de forma predeterminada, para que pueda obtener un estilo de sitio unificado. Describiré esto en detalle en futuros artículos.
El código de página para editar o agregar libros es el siguiente:
< %@ page lenguaje = "java" contentType = "text/html; charset = utf-8" PageEncoding = "utf-8" %> < %@ taglib prefix = "s" uri = "/struts-tags" %> <! Doctype html público "-// w3c // dttd xhtml 1.0 transitional/ "http://www.w3.w3.org/tr/XHtml1/dtd/xhtml1-tranSicional.dtd"> == Libro "> Agregar libro < /s: if> <s: else> editar libro </s: else> </h2> <s: form de acción =" store "> <s: textfield name =" book.isbn "etiqueta =" isbn " /> <s: textfield name =" book.title "etiquet =" título " /> <s: textfield name =" book. book.pice "Label =" precio " /> </s: form> </body> </html>
Listado 6 WebContent/Book/Edit.jsp
Si el libro es nulo, significa que la página se usa para agregar libros, y viceversa es la página de edición.
Para facilitar a todos a ejecutar los ejemplos, también publiqué el código web.xml, de la siguiente manera:
<? xml versión = "1.0" encoding = "utf-8"?> <web-app id = "webapp_9" versión = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://java.com/xml /j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name> struts 2 FileUpload </sippsion-name> <filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </siltre> <filtre-mapping> <filter-name> struts2 </filtre-name> <url-pattern>/*</sl-pattern> </filter-mapping> <beating-file-list> <welcome-file> index.html </breve-file> </welcome-file-list> </web-app>
Listado 7 WebContent/Web-Inf/Web.xml
La tarea se realiza, la siguiente se publica para ejecutar la aplicación, tipo: http: // localhost: 8080/struts2_crud/book/list.action en el navegador, y la página que se muestra en la figura a continuación aparece:
Listado 8 Página de listado
Haga clic en "Agregar libro" y aparece la página que se muestra en la siguiente figura:
Listado 9 Agregar página de libros
Regrese a la página de la lista y haga clic en "Editar", y aparece la página que se muestra en la figura a continuación:
Listado 10 Página de edición de libros
Resumir
Este artículo solo presenta brevemente el método de implementación de CRUD de Struts 2, por lo que no se implementan muchas funciones, como la internacionalización y la verificación de datos. Puede mejorarlo en función del ejemplo anterior, y también es bueno practicar. Si no entiende, por favor déjame un mensaje. El editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin Network!