Avant, nous avons terminé la logique métier liée aux catégories de produits, puis nous avons commencé à faire la partie du produit spécifique.
1. Créer des tableaux dans la base de données et les modèles de cartes
Tout d'abord, nous créons une nouvelle table dans la base de données, puis utilisons l'ingénierie inverse pour cartographier la table dans une classe de modèle, la table est la suivante:
/ * ============================================================. =============================================================. Créer un produit de table (/ * Numéro de produit, croissance automatique * / id int ke clés primaire non null auto_increment, / * Nom du produit * / nom varchar (20), / * prix du produit * / prix décimal (8,2), / * Image du produit * / pic Varchar (200), / * Produit Breft Introduction * / Remark LongText, / * Détails du produit * / xRemark Longtex Un produit recommandé, il peut être affiché sur la page d'accueil du centre commercial * / commentaire Bool, / * Qu'il s'agisse d'un produit valide, il peut être affiché sur la page d'accueil du centre commercial * / Open Bool, / * Le numéro de catégorie du produit est situé * / CID INT, contrainte CID_FK Foreign Key (CID) références catégories (id));
Je n'entrerai pas dans les détails de l'utilisation de la cartographie de l'ingénierie inverse pour modéliser la classe. J'ai mentionné plus tôt comment utiliser l'ingénierie inverse pour générer un modèle.
2. Complétez la couche de service et l'architecture d'action de la catégorie de produit
2.1 Architecture de couche de service pour les catégories de produits
Comme la catégorie précédente, le produit doit également avoir un service pour exploiter la logique commerciale liée au produit, nous devons donc écrire un cadre de ProductService et ProductServiceImpl, qui est le suivant:
// Interface ProductService Hérite de BasEservice <produit> Interface publique ProductService étend BasEservice <Ruddus> {} // ProductServiceImpl implémente ProductServiceImpl <Product> Hérite de BaseServiceImpl <Product> et implémente l'interface de ProduceService @Service ("ProductService") 2.2 Structure d'action des catégories de produits
Tout d'abord, nous devons améliorer les annotations sur la couche de service dans Baseaction
@Controller ("BaseAction") @Scope ("Prototype") Classe publique BaseAction <T> étend ActionSupport implémente DequeviceAware, SessionAware, ApplicationAware, ModelDriven <T> {@Resource Protected ProduceService ProduceService; // Autre code est omis, ou le code d'origine ...} Ensuite, nous écrivons une productaction pour hériter de la méthode:
classe publique ProductAction étend Baseaction <Ridup> {}À ce stade, l'architecture backend du produit a été essentiellement construite et l'étape suivante consiste à améliorer les fonctions spécifiques et la logique métier.
3. Complétez la structure de base de la réception
La structure de base de la réception est la même que celle de la catégorie des produits. Jetons un coup d'œil à quels documents sont disponibles pour la catégorie des matières premières finis:
Nous copie d'abord une copie dans le dossier produit en fonction des fichiers de la réception de sa catégorie de produit, puis nous apportons des modifications correspondantes. Analysons d'abord le processus: d'abord, index.jsp vers Aindex.jsp affiche la barre de menu à gauche. Lorsque vous cliquez sur la gestion des catégories, entrez la page Catégorie / Query.jsp pour afficher toutes les informations de catégorie de produits à droite. Les fonctions de recherche et de suppression sont sur cette page. Il n'est pas nécessaire d'apparaître une nouvelle fenêtre, d'ajouter une fenêtre Save.jsp pop-up et de la fenêtre Update.jsp. Lorsque vous cliquez sur la gestion des produits, entrez la page Product / Query.jsp pour afficher toutes les informations du produit sur le côté droit. Les fonctions de recherche et de suppression sont remplies sur cette page. L'ajout et la mise à jour de Save.jsp et Update.jsp apparaissent respectivement. Ensuite, nous créerons le cadre de chaque page, puis remplirons la partie correspondante.
Ajoutez d'abord le code suivant dans Aindex.jsp:
Ensuite, nous terminons le framework Query.jsp:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! Doctype Html public "- // w3c // dtd html 4.01 transitional // en"> <html> marge: 1px; } .searchbox {margin: -3; } </ style> <script type = "text / javascript"> $ (function () {$ ('# dg'). dataGrid ({// modifier l'adresse URL en méthode queryjoingategory dans la demande productaction url: 'product_queryjoincategory.action', chargemsg: 'charger ......', queryparams: {nom La valeur du paramètre est vide, indiquant que nous voulons afficher tous les produits. Mise à jour. function () {// ajouter du code de déclenchement}}, '-', {iConcls: 'icon-remove', texte: 'supprimer le produit', gestionnaire: fonction () {// ajouter du code de déclenchement}}, '-', {// Le bouton de requête n'est pas un linkbutton, il a syntax name = 'ssrach' /> "}], rowStyler: fonction (index, row) {console.info (" index "+ index +", "+ row) if (index% 2 == 0) {return 'background-color: #fff;'; } else {return 'background-Color: # c4e1e1;'; }}, Frozencolumns: [[{champ: 'Checkbox', Checkbox: true}, {champ: 'id', titre: 'Numéro de produit', Width: 100}]], colonnes: [[{champ: 'name', Title: 'Product Name', With: 100}, {Field: 'Price', Title: 'Product Price', Width: 100}, {Field: 'Price', Title: 'Product Price', Width: 100}, {Field: 'Price', Title: 'Product Price', Width: 100}, {Field: 'Price', Title: 'Product Price', Width: 100}, {Field: 'Price', Title: 'Product Price', Width: 100}, {Field: 'Price', Title: 'Product Price', Width: ' Description ', largeur: 100}, {champ:' xRemark ', titre:' Detailled Description ', Width: 100}, {Field:' Date ', Title:' Release Time ', Width: 100}, {Field:' Redrend ', Title:' Product recommandé ', Width: 100, Formatter: Function (Value, Row, index) {if (valeur) {return "<contour =' Checkbox ' Disabled = 'true' "; } else {return "<input type = 'Checkbox' Disabled = 'true'"; }}}, {Field: 'Open', Title: 'Valid Product', Width: 100, Formatter: Function (Value, Row, Index) {if (Value) {return "<Input Type = 'Checkbox' Checked = 'Checked' Disabled = 'TRUE'"; } else {return "<input type = 'Checkbox' Disabled = 'true'"; }}}, {champ: 'catégorie.type', titre: 'Product Catégorie', Width: 200, //category.type est le format de catégorie de produit: fonction (valeur, ligne, index) {if (row.category! = null && row.category.type! = null) {return row.category.type; // Si la catégorie de produit n'est pas vide, renvoyez la catégorie de produit} else {return "Ce produit n'est pas classé pour le moment"; }}}]]}); // Convertir la zone de texte ordinaire en une zone de texte de recherche de requête $ ('# ss'). SearchBox ({// Trigger Query Event Searcher: function (valeur, nom) {// La valeur représente la valeur d'entrée // Ajouter le code de déclenchement}, invite: 'Veuillez saisir le mot-clé de recherche'}); }); </ script> </ head> <body> <table id = "dg"> </ table> </ body> </html> Ensuite, nous terminons la méthode QueryJoincategory dans ProductAction. Avant cela, nous devons terminer la partie de service. Nous le développerons lentement à partir de la couche inférieure:
// Interface ProductService Interface publique ProduceService étend BaseService <Rudding> {// Informations sur les produits de requête, catégories en cascading Liste publique <Darcodule> QueryJoincategory (type de chaîne, page int, taille int); // requête en utilisant le nom du produit // requête le nombre total d'enregistrements basés sur les mots clés public long getCount (type de chaîne); } @SuppressWarnings ("Unchecked") @Service ("ProductService") Public Class ProductServiceImpl étend BaseServiceImpl <Product> Implementation ProducceService {@Override Public List <Rudce> QueryJoincategory (String Name, int Page, int Size) {String hql = "à partir du produit P Left Rejointe P. return getSession (). CreateQuery (HQL) .SetString ("name", "%" + name + "%") .setFirSult ((page-1) * size) // show .setMaxResults (taille) // affiche plusieurs .List (); } @Override public long getCount (String name) {String hql = "select count (p) From Product p où p.name like: name"; return (long) getSession (). CreateQuery (HQL) .SetString ("name", "%" + name + "%") .UniqueResult (); // Renvoie un enregistrement: nombre total d'enregistrements}} La méthode QueryJoincategory dans ProductAction peut être terminée:
@Controller ("ProductAction") @Scope ("Prototype") public Class ProductAction étend BaseAction <Rudding> {public String QueryJoincategory () {System.out.println ("Name:" + Model.getName ()); System.out.println ("page:" + page); System.out.println ("lignes:" + lignes); // Utilisé pour stocker les données paginées PageMap = new HashMap <String, objet> (); // interroge les données correspondantes en fonction des mots clés et des paramètres de pagination Liste <product> productList = productiveService.QueryJoingategory (Model.getName (), page, lignes); PageMap.put ("Rows", ProductList); // Stockage au format JSON // interroge le nombre total d'enregistrements basés sur les mots clés Long Total = productiveService.getCount (Model.GetName ()); // Stockage au format JSON Renvoie "JSONMAP"; }} Ensuite, configurez-le dans strut.xml et le même processus que la catégorie de produit précédente. De là, vous pouvez voir qu'après avoir développé un, le suivant sera bientôt:
<action name = "product_ *" method = "{1}"> <résultat name = "jsonmap" type = "JSON"> <param name = "root"> pagemap </param> <param name = "ExcludeProperties"> <! - Sinon, les problèmes de chargement de lazaine se produiront. La capture d'écran suivante de cette pièce -> </param> </sult> </ Action>De cette façon, le programme d'arrière-plan est écrit, puis ouvre Tomcat et le tester. Lorsque nous cliquons sur la gestion des produits dans la barre de menu à gauche, la fenêtre suivante à droite apparaîtra:
De cette façon, nous avons terminé le cadre de la fenêtre de gestion des produits.
Adresse originale: http://blog.csdn.net/eson_15/article/details/51354932
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.