Dans le dernier article, nous avons terminé l'affichage DataGrid des données JSON, mais il n'était pas associé à l'arrière-plan. Nous avons simplement affiché les données JSON que nous avons faites nous-mêmes. Dans cette section, nous avons intégré JSON et Struts2 pour relier l'interaction entre EasyUi et Struts2.
1. Construction de l'environnement JSON
L'environnement JSON est très simple, il suffit d'importer le package JSON JAR, comme suit:
(Remarque: Adresse de téléchargement du package JAR-2.4 de JSON-LIB-2.4: http://xiazai.vevb.com/201605/yuanma/json-lib-2.4(vevb.com).rar)
2. Améliorer l'action
Il existe une propriété dans le contrôle DataGrid qui est URL, qui peut spécifier l'adresse URL des données demandées. Dans la section précédente, nous définissons directement cette adresse sur un fichier JSON spécifique. Ici, nous définissons cette URL sur une action, telle que URL: «catégories_queryjoinAccount.action», ce qui signifie que la méthode QueryjoinAccount de la catégorie sera demandée (le code de query.jsp sera donné à la fin de l'article). Nous devons donc compléter la méthode QueryJoinAccount dans catégorieAction.
Avant d'intégrer Struts2 et JSON, jetons un coup d'œil aux demandes envoyées pour les données JSON affichées avant:
Étant donné que le type est une propriété de la classe de catégorie, nous avons implémenté l'interface <catégories> ModelDrined dans la base de base, de sorte que ce type sera encapsulé dans le modèle. Nous n'avons pas à nous en soucier, nous pouvons l'obtenir via le modèle. Cependant, nous devons obtenir les paramètres de page et de lignes envoyés automatiquement par EasyUI, afin que nous puissions ajouter une page et des lignes de variables de membre et des lignes à BasEmodel et implémenter les méthodes GET et SET. Enfin, nous devons considérer une chose. Une fois que tous ces paramètres sont obtenus, nous interrogeons les données de la base de données en fonction de ces paramètres. Alors, où mettons-nous les données que nous avons trouvées? Il doit également être emballé au format JSON et envoyé à la réception avant de pouvoir être affiché par DataGrid. Nous ne considérons pas comment emballer les données de requête au format JSON. Nous envisageons d'abord de mettre ces données en un seul endroit. Il est naturel de penser à utiliser la carte, car les données au format JSON se présentent sous la forme d'une valeur clé. En pensant à cela, nous continuons d'améliorer Baseaction:
@Controller ("Baseaction") @Scope ("Prototype") Classe publique BaseAction <T> étend ActionSupport implémente DequekAware, SessionAware, ApplicationAware, ModelDriven <T> {// La page et les lignes sont liées à la pagination. PageMap stocke les données de requête, puis les emballe au format JSON. // page et lignes pour implémenter les méthodes GET et SET. PageMap doit uniquement implémenter la méthode GET, car PageMap ne reçoit pas de paramètres frontaux, mais est une page entière protégée; lignes entières protégées; Map protégé <String, objet> pagemap = null; // Laissez différentes actions les implémenter par elles-mêmes // omettre les méthodes de get and définir ... / *************************** C'est toujours la partie de base de la base de base **************************** // // Service Object @Resource Protected catégorySensiceService; @Resource Protected AccountService AccountService; // MAP protégée par un objet Domain <String, objet> request; Map protégé <String, Object> Session; MAP protégé <chaîne, objet> Application; @Override public void setApplication (map <string, objet> application) {this.application = application; } @Override public void setSession (map <string, objet> session) {this.Session = session; } @Override public void setRequest (map <string, objet> request) {this.request = request; } // modèle t protégé par modèle; @Override public t getModel () {ParametezedType type = (ParameteralizedType) this.getClass (). GetGenerricsuperclass (); Class Clazz = (class) type.getactualTypearguments () [0]; essayez {modèle = (t) Clazz.NewInstance (); } catch (exception e) {lancer une nouvelle RuntimeException (e); } Retour Modèle; }} OK, après avoir amélioré la catégorie de base, nous pouvons écrire la méthode QueryJoinAccount dans catégorieAction. Nous supprimons toutes les méthodes d'origine de CatégoryAction, car celles-ci ont été utilisées pour les tests lors de la construction de l'environnement auparavant, et elles n'étaient plus nécessaires. Maintenant, nous avons vraiment commencé le code du projet:
@Controller ("catégorieAction") @Scope ("Prototype") Classe publique CatégorieAction étend BaseAction <Catégorie> {public String QueryJoinAccount () {// Utilisé pour stocker les données de PageMap = new HashMap <String, Object> (); // interroge les données correspondantes en fonction des mots clés et des paramètres de pagination. Nous avons écrit cette méthode en service. À ce moment-là, nous avons terminé la liste des requêtes en cascade <Catégorie> categoryList = categoryService.QueryJoinAccount (Model.getType (), page, lignes); pagemap.put ("lignes", catégorieList); // stocké au format JSON. À partir du fichier JSON dans la section précédente, on peut voir qu'une clé est totale et qu'une clé est des lignes. Ici, nous stockons d'abord les lignes. // interroge le nombre total d'enregistrements basés sur les mots clés longs = catégorieService.getCount (Model.getType ()); // Cette méthode n'a pas été écrite, allons à la couche de service pour l'améliorer plus tard // System.out.println (total); pagemap.put ("total", total); // le stockage au format JSON, puis stocker le retour total "jsonmap"; }} De cette façon, nous avons écrit l'action. Maintenant, l'action obtient les paramètres envoyés à partir de la réception, puis interroge le nombre total d'enregistrements du type spécifié et tous les produits du type spécifié en fonction des paramètres. Il est stocké selon les clés spécifié dans JSON (c'est-à-dire le total et les lignes) et placé dans le hashmap. Après cela, tant que les données de ce hashmap sont emballées au format JSON et envoyées à la réception, elle peut être affichée par DataGrid. Nous mettons d'abord ce hashmap, améliorons d'abord le code de couche de service, puis emballons les données dans ce hashmap.
3. Améliorer la catégorie desservise
D'après la catégorieAction ci-dessus, nous pouvons voir qu'une méthode GetCount doit être ajoutée à la catégorie SERVICE, et elle doit être mise en œuvre dans la classe de mise en œuvre spécifique, comme suit:
// Interface CatégoryService Interface publique CatégorieService étend BaseService <catégories> {// Informations sur la catégorie de requête, Cascading Administrator public List <Catégorie> QueryJoinAccount (Type de chaîne, page int, taille int); // requête en utilisant le nom de la catégorie // requête le nombre total d'enregistrements basés sur les mots clés public long getCount (type de chaîne); } // categoryServiceImpl implémentez la classe @SuppressWarnings ("Unchecked") @Service ("CatégoryService") classe publique CatégorieServiceImpl étend BaseServiceImpl <Catégory> implémente catégorieservice {@Override List public <catégories> QueryjoinCount (Type de chaîne, INTRIEUX Inton C.Type comme: Type "; return getSession (). CreateQuery (HQL) .SetString ("type", "%" + type + "%") .setFirStResult ((page-1) * taille) // afficher à partir du premier One.SetMaxResults (taille) // affiche plusieurs .List (); } @Override public long getCount (String Type) {String hql = "select count (c) From Catégorie C où C.Type comme: type"; return (long) getSession (). CreateQuery (HQL) .SetString ("type", "%" + type + "%") .UniqueResult (); // Renvoie un enregistrement: nombre total d'enregistrements}} Jusqu'à présent, le chemin d'obtention de données dans cette base de données a été ouvert. Les deux premières étapes ont été effectuées pour récupérer les données de la réception -> Base de données ->, puis nous commençons à emballer les données stockées dans le hashmap, puis l'envoyons à la réception.
4. Configurer les struts.xml
Emballage Les données spécifiées peuvent être terminées par configuration dans strut.xml. Regardons d'abord la configuration dans strut.xml:
<Trutts> <constante name = "strut.devmode" value = "true" /> <package name = "shop" étend = "json-default"> <! - Jason-default hérite de struts-default -> <global-résults> <résultat name = "Aindex"> / web-inf / main / aindex.jsp </sult> </salon-résults> <! configuré dans le printemps, car il doit être remis à Spring Management -> <action name = "catégorie_ *" méthode = "{1}"> <! - Vous devez d'abord ajouter le package JSON, puis hériter du JSON-Default ci-dessus -> <résultat Name = "JSONMAP" Type = "JSON"> <! listes noires, filtrez les options inutiles et supportez l'expression régulière JSON Format: {total: 3, lignes: [{compte: {id: 2, connexion: "utilisateur", nom: "Service client a", pass: "utilisateur"}, chaud: true: id: 3,…}]} -> <param name = "Excludeproperties"> <! - Rows [0]. être affiché ici. Un bogue en csdn, je suivrai l'image et le mettrai ci-dessous -> </ param> </sult> </ action> <action name = "account_ *" method = "{1}"> <le résultat = "index"> / index.jsp </cult> </ action> <! - L'action utilisée pour terminer le transfert de la demande du système, toutes les demandes sont transmises à l'exécution -> <action nom = "Send _ * *" name = "Send"> / web-inf / {1} / {2} .jsp </sult> </ action> </ package> </ struts>À partir de la configuration ci-dessus, nous pouvons voir que tout d'abord, le package doit hériter de JSON-Default, car JSON-Decault Hérite Struts-Decault, car il existe un Struts2-Json-Plugin-2.3.24.1.jar dans le package JSON JAR. Vous pouvez l'ouvrir et voir qu'il y a un Struts-Plugin.xml à l'intérieur. Vous pouvez l'ouvrir et voir que Json-Default hérite de Struts-Default:
Ensuite, je configure <Sult>, le nom est la chaîne renvoyée uniquement par action, et le type doit être égalé à JSON. Ensuite, il y a les paramètres dans le résultat. Tout d'abord, le paramètre qui doit être apparié avec le nom comme racine. Ce paramètre doit être apparié dans l'objet HashMap qui doit être converti tout à l'heure, c'est-à-dire le pagemap que nous avons défini. Avec la configuration de ce paramètre, Struts emballera les données dans le format PageMap au format JSON. Configurez ensuite la liste noire. La liste noire signifie indiquer à Struts quels champs n'ont pas besoin d'être emballés lors de l'emballage, tels que des informations sur les mots de passe administratrice. Du format Jason dans le commentaire ci-dessus, vous pouvez voir que les lignes [0] .Account.Pass représente le champ de mot de passe, mais il doit y avoir plus d'une données, nous devons donc utiliser des expressions régulières pour la représenter, afin que tous les mots de passe ne soient pas emballés en JSON.
5. Modifier le contenu Query.jsp
À ce stade, nous avons emballé les données au format JSON. Ensuite, nous améliorerons le contenu de la requête frontale.jsp pour afficher correctement l'affichage de DataGrid:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <! DocType Html public "- // w3c // dtd html 4.01 transitional // en"> <html> <adread> <% @ incluse File = "/ public / head.jspf"%> <script = "Text / Javas"> ">"> ">"> ">"> javas ">"> kavas ">"> "> javas"> ">"> javas ">"> "> javas"> ">"> javas ">"> "> javas"> "> kavas "> $ (function () {$ ('# dg'). dataGrid ({// L'adresse URL est modifiée pour demander URL de catégorieAction: 'catégorie_queryjoinaccount.action', chargemsg: 'Chargement ......', QueryParams: {type: ''}, // Type Paramètres, il n'a pas besoin de passer des types spécifiques, parce que nous voulons afficher tout tout Stripged: true, Nowrap: true, singleselect: true, pagination: true, rowstyler: function (index, row) {console.info ("index" + index + "," + row) if (index% 2 == 0) {return 'background-Color: #fff;';; {champ: 'Checkbox', Checkbox: true}, {champ: 'id', titre: 'numéro', width: 200} // Les champs de champs ici devraient être les mêmes que ceux de la base de données, c'est-à-dire qu'ils devraient être les mêmes que ceux des données JSON]], les colonnes: [{Field: 'Type', Title: 'catégories', width: 100, // Field Formatter: Furey (Value, index) `` Width: 100, // Field Formatter: Function (Row, Catégorie '', width: 100, // Field Formatter: Fonde (Row, Catégorie Nom ', Width: 100, // Field Formatter: Fonds (Row, Name', Width: 100, // Field Formatter: Facew return "<span>" + valeur + "</span>"; }}, {champ: 'hot', titre: 'hot', largeur: 100, // Field Hot Foratter: function (valeur, ligne, index) {if (valeur) {// s'il est chaud, la valeur est vraie, et la valeur est une variable booléenne return "<entrée = 'Checkbox' checked = 'checked' Disabled = 'true'";; // tick} else {return "<input type = 'checkbox' disable = 'true'"; // ne vérifie pas}}}, {champ: 'account.login', titre: 'Administrator', width: 200, //account.loginadministrator Nom du nom de connexion: fonction (valeur, row, index) {if (row.account! = Null && row.account.login! = Null) {return row.ccount.login; // Si le nom de connexion n'est pas vide, affichez le nom de connexion} else {return "Il n'y a pas d'administrateur dans cette catégorie"; }}}]]}); }); </ script> </ head> <body> <table id = "dg"> </ table> </ body> </html> 6. Le test montre les résultats
Enfin, testons les résultats d'affichage de DataGrid, comme suit:
À ce stade, nous avons réussi à intégrer Struts2 et JSON, et maintenant nous pouvons transmettre des données au format JSON au premier plan.
(Remarque: En fin de compte, je fournirai le téléchargement du code source de l'intégralité du projet! Tout le monde est le bienvenu pour collecter ou partager)
Adresse originale: http://blog.csdn.net/eson_15/article/details/51332758
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.