Crud é a abreviação de criar, ler, atualizar e excluir, e é um microcosmo de aplicativos comuns. Se você dominar a redação de uma estrutura, isso significa que você pode usar a estrutura para criar aplicativos comuns. Portanto, quando você usa a nova estrutura para desenvolver aplicativos OLTP (processamento de transações on -line), primeiro estudará como escrever CRUD. Isso é semelhante à maneira como as pessoas gostam de escrever "Hello World" ao aprender novas linguagens de programação.
Este artigo visa descrever o desenvolvimento do CRUD no Struts 2; portanto, por uma questão de simplicidade e facilidade de entendimento, não gastarei tempo em operações de banco de dados. Em vez disso, uma tabela de hash (mapa de hash) que simula o banco de dados.
Implementação específica
Primeiro, vamos dar uma olhada no DAO "falso" (objeto de acesso a dados, objeto de acesso a dados), o código é o seguinte:
pacote tutorial.dao; importar java.util.collection; importar java.util.concurrent.ConcurrentHashmap; importar java.util.Concurrent.ConcurrentMap; STTATION.MODEL.BOOK; Public Class Bookdao {private static bookda; instância; private.model.book; BookDao();data = new ConcurrentHashMap<String, Book>();data.put("978-0735619678", new Book("978-0735619678", "Code Complete, Second Edition", 32.99));data.put("978-0596007867", new Livro ("978-0596007867", "The Art of Project Management", 35.96)); Data.put ("978-0201633610", novo livro ("978-0201633610", "Padrões de design: elementos do software reusível-oriented-oriented", 43.19); Livro ("978-0596527341", "Arquitetura de informação para a World Wide Web: projetar sites de larga escala", 25.19)); Data.put ("978-0735605350", novo livro ("978-075605350", "Estação do software: {} public static bookdao getInstance () {return instance;} collection public <Book> getBooks () {return data.values ();} public book getbook (string isbn) {return data.get (isbn);} public void storok (livro de livros) {data.put (book.get (); {data.remove (isbn);} public void removebooks (string [] isbn) {for (string isbn: isbn) {data.remove (isbn);}}}Listagem 1 src/tutorial/dao/bookdao.java
Acredito que nenhuma explicação é necessária para o código acima. Eu uso a estrutura de dados do ConcurrentMap para armazenar objetos de livro, que é principalmente para facilitar a recuperação e armazenamento de objetos de livro; Além disso, também defino a variável de dados como estaticamente exclusiva para simular o banco de dados do aplicativo.
Em seguida, é a aula de livro de modelos de dados, o código é o seguinte:
pacote tutorial.model; public class Livro {private string isbn; título de sequência privada; preço duplo privado; public book () {} public book (string isbn, título da string, preço duplo) {this.isbn = isbn; this.title = title; title.price = price;} public string getisn () {return isbn; isbn;} public duplo getPrice () {preço de retorno;} public void setPrice (preço duplo) {this.price = price;} public string gettitle () {return title;} public void Settitle (string title) {this.title = title;}}}}}Listagem 2 src/tutorial/modelo/book.java
A aula do livro tem três atributos: ISBN, título e preço representam o número, nome e preço do livro, respectivamente. O número é usado para identificar exclusivamente o livro (equivalente à chave primária no banco de dados).
Então, vamos dar uma olhada no código da classe de ação:
pacote tutorial.action; importar java.util.collection; importar tutorial.dao.bookdao; importar tutorial.model.book; importação com.opensymphony.xwork2.Actionupport; public class BookAction) private; Coleção <Book> livros; private bookdao dao = bookdao.getInstance (); public book getBook () {return book;} public void Setbook (livro de livros) {this.book = book;} public string getisbn () {return isbn;} public voidnbn (string}; isbn;} public void SetIsbnns (String [] isbnns) {this.isbns = iSbnns;} public collection <BeTBetBears () {return books;} public setbooks (coleta.ter.ter.lbooks = DABABROTBETE {Livros) {this.Books = books; Dao.getBooks (); retornar sucesso;} public string store () {dao.storebook (livro); retornar sucesso;} public string remover () {if (null!Listagem 3 src/tutorial/action/bookaction.java
Na classe BookAction, o atributo ISBN é usado para representar o número de livros a serem editados ou excluídos, o atributo ISBNS é usado para representar a matriz numérica de livros a serem excluídos, o livro de atributos representa o livro atual e os livros de atributos representam a lista atual da lista de livros. A BookAction possui quatro métodos de ação, carregar, listar, armazenar e remover, ou seja, Crud é implementado no BookAction.
Em seguida é o código de configuração de ação:
<? xml versão = "1.0" coding = "utf-8"?> <! Doctype suporta public "-// Apache Software Foundation // DTD Struts Configuration 2.0 // pt" "http://struts.apache.org/dtds/stuts-2.0.dctd" estends = "Struts-Default" namespace = "/book"> <ação name = "list" method = "list"> <resultado> list.jsp </resultado> </action> <action name = "edit" method = "load"> <cost> edit.jsp </resultado> </action> <action> name = "store"/"store> <cost> name = "remover" método = "remover"> <resultado tipo = "redirect"> list.action </resultado> </action> </package> </struts>
Listando 4 src/struts.xml
Na configuração acima, usei quatro definições de ação. Eles estão todos dentro do espaço para nome "/livro". Dessa forma, posso chamar os quatro métodos de ação da BookAction para operações de CRUD por "http: // localhost: 8080/struts2_crud/book/list.action", "http: // localhost: 8080/struts2_crud/book/edit.action", "Htttp: // Localhost": 80. 80. 80. 80.0.20/struts/struts: 80. 80. 80. 80. 80.0.20/struts/struts2_crud/book/edit.action "," htttp: // localhost ": "http: // localhost: 8080/struts2_crud/book/remove.action". Claro, isso é apenas uma preferência pessoal. Você só pode definir uma ação (assumindo que seu nome é "livro") e depois acessá -lo através de "http: // localhost: 8080/struts2_crud/book! List.action". Para detalhes, consulte "Struts 2.0 Action Explication". Além disso, uso o resultado do redirecionamento do tipo (redirecionamento), pois quero retornar à página da lista depois de terminar a edição ou exclusão.
Aqui está o código da página da lista:
< %@ Page Language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8" %> < %@ taglib prefix = "s" uri = "/struts-tags" %> <! "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transition.dtd"><html xmlns =" http://www.w3 Black sólido; colapso da borda: colapso;} Tabela TH TR TH {Border: 1px Solid Black; Padding: 3px; Background-Color: #ccccccc;} tabela tbody td {borda: 1px Solid Black; Padding: 3px;} </style> </"<body> <h2> Lista </H2: CellPacing = "0"> <Thead> <tr> <th> selecione </th> <th> isbn </th> <th> title </th> <th> preço </th> <the> operação </th> </tr> </thead> <tbody> <s: iteator valor = "books"> <tr> <Td> value = "isbn" /> ' /> </td> <td> <s: propriedade value = "isbn" /> /> </td> <td> $ <s: property value = "preço" /> </td> <td> <a href =' <s: urfl = "edit"> <s: parameng name = ébn é /></s:url>'>Edit</a><a href='<s:url action="Remove"><s:param name="isbn" value="isbn" /></s:url>'>Delete</a></td></tr></s:iterator></tbody></table><s:submit value="Remove" /><a href = "edit.jsp"> adicione livro </a> </s: form> </body> </html>Listagem 5 webcontent/book/list.jsp
No código acima, vale a pena notar que, na tag <s: form>, eu defino a propriedade tema como "simples", para que ela possa cancelar seu layout de tabela padrão. Anteriormente, alguns amigos me perguntaram: "O que devo fazer se não quiser que o botão Enviar seja colocado à direita?" A transpiração acima é uma das respostas. Obviamente, é melhor personalizar um tema e aplicá -lo em todo o site por padrão, para que você possa obter um estilo de site unificado. Vou descrever isso em detalhes em artigos futuros.
O código da página para editar ou adicionar livros é o seguinte:
< %@ Page Language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8" %> < %@ taglib prefix = "s" uri = "/struts-tags" %> <! "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns =" http://www.w3.org/199/xhtml "> <title> </title == Livro "> Adicionar livro </s: se> <s: else> editar livros </s: else> </h2> <s: formar action =" store "> <s: textfield name =" book.isbn "etc." isbn " /> <s: bookfield name =" book.title "" title " /> <s /<s. /> </s: form> </body> </html>
Listagem 6 webcontent/book/edit.jsp
Se o livro for nulo, significa que a página é usada para adicionar livros e vice -versa é a página de edição.
Para facilitar todos para executar os exemplos, também publiquei o código web.xml, como segue:
<? xml versão = "1.0" coding = "utf-8"?> <web-app id = "webapp_9" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>struts 2 FILEUPLOAD </semplay-name> <filter> <filter-name> struts2 </filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <filter-Mapping> <Filter-Name> struts2 </filter-name> <url-tattern>/*</url-tattern> </filter-mapping> <lorde-fil-list> <lmed-File> index.html </cle Welcome-file> </weld-File-list> </web-app>
Listagem 7 webcontent/web-inf/web.xml
A tarefa é realizada, o seguinte é publicado para executar o aplicativo, tipo: http: // localhost: 8080/struts2_crud/book/list.action no navegador, e a página mostrada na figura abaixo aparece:
Listagem 8 página de listagem
Clique em "Adicionar livro" e a página mostrada na figura abaixo aparece:
Listagem 9 Adicionar página do livro
Retorne à página da lista e clique em "Editar", e a página mostrada na figura abaixo aparece:
Listagem 10 Página de livros de edição
Resumir
Este artigo apresenta apenas brevemente o método de implementação do CRUD do Struts 2, tantas funções não são implementadas, como internacionalização e verificação de dados. Você pode melhorá -lo com base no exemplo acima, e também é bom praticar. Se você não entende, deixe -me uma mensagem. O editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site da Wulin Network!