Crud est l'abréviation de créer, lire, mettre à jour et supprimer, et c'est un microcosme d'applications ordinaires. Si vous maîtrisez l'écriture CRUD d'un cadre, cela signifie que vous pouvez utiliser le cadre pour créer des applications ordinaires. Par conséquent, lorsque vous utilisez le nouveau framework pour développer des applications OLTP (traitement des transactions en ligne), vous étudierez d'abord comment écrire CUD. Ceci est similaire à la façon dont les gens aiment écrire "Hello World" lors de l'apprentissage de nouveaux langages de programmation.
Cet article est destiné à décrire le développement de Crud sur Struts 2, donc par souci de simplicité et de facilité de compréhension, je ne passerai pas de temps sur les opérations de base de données. Au lieu de cela, une table de hachage (carte de hachage) qui simule la base de données.
Implémentation spécifique
Tout d'abord, jetons un coup d'œil au "faux" DAO (objet d'accès aux données, objet d'accès aux données), le code est le suivant:
Package Tutorial.dao; Importer java.util.collection; import java.util.concurrent.concurrenthashmap; import java.util.concurrent.concurrentmap; importatorial.model.book; public class bookdao {private static final bookdao instance; newn final static concurrentmap <string, book> data; static {instance = newtyrest static stial concurrentmap <string, book> datare; instance = newredre; newred static concurrentmap <string, book> data; instance = newred insembe Bookdao (); data = new concurrenthashmap <string, book> (); data.put ("978-0735619678", nouveau livre ("978-0735619678", "Code complet, deuxième édition", 32,99)); data.put ("978-0596007867", new, new, new Livre ("978-0596007867", "The Art of Project Management", 35.96)); data.put ("978-0201633610", nouveau livre ("978-020163610", "Design Pattern: Elements of Reusable Object-Oriented Software", 43.19); Data.Put ("978-05965273419); Livre ("978-0596527341", "Information Architecture for the World Wide Web: Designing à grande échelle sites Web", 25.19)); data.put ("978-0735605350", nouveau livre ("978-0735605350", "Software Estimation: Demystifyship the Black Art", 25.19));} Private. {} public static bookdao getInstance () {return instance;} public collection <book> getBooks () {return data.values ();} public livre getBook (String isbn) {return data.get (isbn);} public void storebook (book book) {data.put (book.getisbn (), book);} public Void Supporbook (String isbn) {data.reMove (isBn);} public void demovebooks (string [] isbn) {for (String isBn: isbn) {data.remove (isbn);}}}Listing 1 src / tutoriel / dao / bookdao.java
Je crois qu'aucune explication n'est requise pour le code ci-dessus. J'utilise la structure de données concurrentMap pour stocker des objets de livre, qui est principalement pour faciliter la récupération et le stockage des objets de livre; De plus, j'ai également défini la variable de données comme statiquement unique pour simuler la base de données de l'application.
Ensuite, la classe de livres du modèle de données, le code est la suivante:
Package Tutorial.Model; Public Class Book {private String isbn; Titre de chaîne privée; double prix privé; livre public () {} livre public (String isbn, title de chaîne, double prix) {this.isbn = isbn; this.title = title; this.price = prix;} public string getisbn () {return isbn = ISBN;} public double getPrice () {return Price;} public void setPrice (double prix) {this.price = prix;} public String getTitle () {return title;} public void Setttitle (String title) {this.title = title;}}Listing 2 src / tutoriel / modèle / book.java
La classe de livres a trois attributs: ISBN, le titre et le prix représentent respectivement le nombre, le nom et le prix du livre. Le nombre est utilisé pour identifier de manière unique le livre (équivalent à la clé principale de la base de données).
Ensuite, jetons un coup d'œil au code de la classe d'action:
Package Tutorial.Action; Import Java.util.collection; Import Tutorial.dao.Bookdao; Import Tutorial.Model.book; Import Com.OpenSymphony.xwork2.ActionSupport; public Class BookAction étend Actionupport {Private Static Final SerialVersionUid = 872316812305356L; Private String ISB; privé; Collection <Book> Books; private bookdao dao = bookdao.getInstance (); public book getBook () {return book;} public void Setbook (book book) {this.book = book;} public String getisbn () {return isbn;} public void setisbn (string isbn) {this.isbn = isbn;} public String isbn;} public void setisbnns (String [] isbnns) {this.isbns = isbnns;} public collection <book> getBooks () {return books;} public void setbooks (collection <book> books) {this.books = books;} public string load () {book = dao.getbook (isbn); return succès;} public lisk (book = dao.getbook (isbn); return succès;} public list () {book = dao.getBook dao.getBooks (); return Success;} public String Store () {dao.storebook (livre); return Success;} public String disovel () {if (null! = isbn) {dao.removebook (isbn);} else {dao.removebooks (isbns);} return succès;}}Listing 3 src / tutoriel / action / bookAction.java
Dans la classe BookAction, l'attribut ISBN est utilisé pour représenter le nombre de livres à modifier ou supprimés, l'attribut ISBNS est utilisé pour représenter le tableau de livres à supprimer, le livre d'attribut représente le livre actuel et les livres d'attribut représentent la liste de livres en cours. BookAction a quatre méthodes d'action, la charge, la liste, le magasin et la suppression, c'est-à-dire que Crud est tout mis en œuvre dans BookAction.
Ensuite, le code de configuration d'action:
<? xml version = "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.dtd"> <strutts> <package nom = "Struts2_crud_dem" extends = "struts-default" namespace = "/ book"> <action name = "list" metheth = "list"> <sult> list.jsp </ result> </ action> <action name = "edit" metheth = "load"> <sult> edit.jsp </ result> </ action> <action name = "store" method = "store"> <necyle type = "regect"> list. name = "retire" method = "retire"> <result type = "redirect"> list.action </sult> </ action> </macking> </truts>
Listing 4 src / strut.xml
Dans la configuration ci-dessus, j'ai utilisé quatre définitions d'action. Ils sont tous dans l'espace de noms "/ livre". De cette façon, je peux appeler les quatre méthodes d'action de BookAction for Crud Operations par "http: // localhost: 8080 / struts2_crud / book / list.action", "http: // localhost: 8080 / struts2_crud / book / edit.action", "http: // localhost: 8080 / Struts2_crud / book / stock.ACTION" et localhost: 8080 / Struts2_crud / book / Books.ACTION. "http: // localhost: 8080 / struts2_crud / book / repos.action". Bien sûr, ce n'est qu'une préférence personnelle. Vous ne pouvez définir qu'une action (en supposant que son nom est "livre"), puis y accéder via "http: // localhost: 8080 / struts2_crud / book! List.action". Pour plus de détails, veuillez vous référer à "Explication de l'action Struts 2.0". De plus, j'utilise le résultat de la redirection de type (redirection) car je souhaite revenir à la page de liste après avoir terminé l'édition ou la suppression.
Voici le code de la page de liste:
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Prefix = "S" URI = "/ Struts-Tags"%> <! DocType Html Public "- // W3C // DTD XHTML 1.0 Transitional // ENC "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns =" http://www.w3.org/1999/xhtml "> <ead> <title lister: 1 / title> <style Type =" Text / Crs " Black solide; bordure de bordure: effondrement;} table thead tr th {border: 1px noir solide; padding: 3px; background-color: #cccccccccc;} Table TBODY TD {border: 1px noir solide; padding: 3px; Cellpacing = "0"> <Thead> <Tr> <Th> SELECT </ TH> <TH> ISBN </ TH> <TH> TITRE </ TH> <TH> Price </ Th> <Th> Opération </ Th> </tr> </ thead> <Tbody> <S: Iterator Value = "Books"> <Tr> <Td> <Entrée = "Checkbox" Name = "ISB" Value = '<S: property /> '/> </ td> <td> <s: propriété value = "isbn" /> /> </td> <td> $ <s: propriété value = "price" /> </td> <td> <a href =' <s: url action = "edit"> <s: param name = "isbn" value = "iSbn" /> </ s: url>'> </a> </a> </a> </a> </a> </a> href = '<s: url action = "retire"> <s: param name = "isbn" value = "isbn" /> </s: url>'> delete </a> </td> </tr> </s: iterator> </pbody> </ table> <s: soumider value = "retire" /> <a href = "edit.jsp" </ body> </html>Listing 5 webContent / book / list.jsp
Dans le code ci-dessus, il convient de noter que dans la balise <s: form>, je définis la propriété du thème sur "Simple", afin qu'il puisse annuler sa disposition de table par défaut. Auparavant, des amis m'ont demandé: "Que dois-je faire si je ne veux pas que le bouton de soumission soit placé à droite?" La transpiration ci-dessus est l'une des réponses. Bien sûr, il est préférable de personnaliser un thème et de l'appliquer à l'ensemble du site par défaut, afin que vous puissiez obtenir un style de site unifié. Je vais décrire cela en détail dans les futurs articles.
Le code de page pour modifier ou ajouter des livres est le suivant:
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <% @ Taglib Prefix = "S" URI = "/ Struts-Tags"%> <! DocType Html Public "- // W3C // DTD XHTML 1.0 Transitional // ENC "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns =" http://www.w3.org/1999/xhtml "> <ead> <title> </itle> </199 <h> == Book "> Ajouter le livre </ s: if> <s: else> éditer le livre </ s: else> </h2> <s: formulaire forme =" store "> <s: textfield name =" book.isbn "label =" iSbn "/> <s: textfield name =" book.title "label =" title "/> <s: textfield name =" book.price "label =" prix "/> <s: soupmes /> </ s: form> </ body> </ html>
Listing 6 webContent / book / edit.jsp
Si le livre est nul, cela signifie que la page est utilisée pour ajouter des livres, et vice versa est la page d'édition.
Pour faciliter tout le monde pour exécuter les exemples, j'ai également publié le code web.xml, comme suit:
<? xml version = "1.0" Encoding = "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: schemalation = "http://java.sun.com/xmlllin http://java.sun.com/xml/ns/j2ee/web-app_2_44 FileUpload </ display-name> <filter> <Lilter-Name> Struts2 </ Filter-Name> <Filter-Class> org.apache.struts2.dispatcher.filterDispatcher </ filter-Class> </filter> <filter-Mapping> <Filter-Name> Struts2 </ Filter-Name> <Url-Pattern> / * </rll-Pattern> </ Filter-Mapping> <Deengers-File-List> <Deen welcome> index.html </ bienvenue-file> </ bienvenue-file-list> </ web-app>
Listing 7 WebContent / Web-inf / web.xml
La tâche est effectuée, ce qui suit est publié pour exécuter l'application, Type: http: // localhost: 8080 / struts2_crud / book / list.action dans le navigateur, et la page illustrée dans la figure ci-dessous apparaît:
Listing 8 page d'inscription
Cliquez sur "Ajouter un livre" et la page illustrée dans la figure ci-dessous apparaît:
Listing 9 Ajouter une page de livre
Revenez à la page de liste et cliquez sur "Modifier", et la page illustrée dans la figure ci-dessous apparaît:
Listing 10 Modifier la page du livre
Résumer
Cet article ne présente que brièvement la méthode de mise en œuvre de CRUD de Struts 2, de sorte que de nombreuses fonctions ne sont pas mises en œuvre, telles que l'internationalisation et la vérification des données. Vous pouvez l'améliorer en fonction de l'exemple ci-dessus, et il est également bon de pratiquer. Si vous ne comprenez pas, laissez-moi un message. L'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web du réseau Wulin!