Im letzten Artikel haben wir die DataGrid -Anzeige von JSON -Daten abgeschlossen, aber es war nicht mit dem Hintergrund verbunden. Wir haben einfach die JSON -Daten angezeigt, die wir uns selbst gemacht haben. In diesem Abschnitt haben wir JSON und Struts2 integriert, um die Interaktion zwischen Easyui und Struts2 zu verbinden.
1. Bau der JSON -Umgebung
Die JSON -Umgebung ist sehr einfach. Importieren Sie einfach das JSON -JAR -Paket wie folgt:
,
2. Aktion verbessern
In der DataGrid -Steuerung befindet sich eine Eigenschaft, die die URL -Adresse der angeforderten Daten angeben kann. Im vorherigen Abschnitt setzen wir diese Adresse direkt auf eine bestimmte JSON -Datei. Hier setzen wir diese URL auf eine Aktion wie URL: 'Category_QueryJoinAccount.Action', was bedeutet, dass die QueryJoinAccount -Methode der Kategorie angefordert wird (der Code von query.jsp wird am Ende des Artikels angegeben). Daher müssen wir die QueryJoinAccount -Methode in der Kategorie vervollständigen.
Bevor Sie Struts2 und JSON integrieren, schauen wir uns an, welche Anfragen für die zuvor angezeigten JSON -Daten gesendet wurden:
Da der Typ eine Eigenschaft der Kategorieklasse ist, haben wir die modelldurchschnittliche <kategorie> -Schinschnittstelle in der Basisreaktion implementiert, sodass dieser Typ in das Modell eingekapselt wird. Wir müssen uns keine Sorgen machen, wir können es über das Modell erhalten. Wir müssen jedoch die von EasyUi automatisch gesendeten Parameter von Seite und Zeilen abrufen, damit wir zwei Mitgliedervariablen und Zeilen zum Basemodel hinzufügen und die GET -Set -Methoden implementieren können. Schließlich müssen wir eine Sache in Betracht ziehen. Nachdem all diese Parameter erhalten wurden, fragen wir die Daten in der Datenbank basierend auf diesen Parametern. Wo setzen wir die Daten, die wir gefunden haben? Es muss auch in das JSON -Format verpackt und an die Rezeption gesendet werden, bevor es von DataGrid angezeigt werden kann. Wir überlegen nicht, wie die Abfragedaten in das JSON -Format verpackt werden können. Wir erwägen zunächst, diese Daten an einem Ort zu setzen. Es ist selbstverständlich, die Verwendung von MAP zu überlegen, da die Daten im JSON-Format in Form von Schlüsselwert sind. Wenn wir darüber nachdenken, verbessern wir weiterhin die Basisreaktion:
@Controller ("Baseaction") @Scope ("Prototyp") Basisanlagen der öffentlichen Klasse <T> Erweitert ActionSup -Geräte implementiert RequestAwe, SessionAware, ApplicationAware, modeldiven <t> {// Seite und Zeilen beziehen sich auf Paging. Pagemap speichert die Abfragedaten und überpackt sie dann in das JSON -Format. // Seite und Zeilen zum Implementieren der GET -and -Set -Methoden. Pagemap muss nur die GET-Methode implementieren, da Pagemap keine Front-End-Parameter erhält, sondern die protected Integer-Seite ist. geschützte Ganzzahlreihen; Protected Map <String, Object> pagemap = null; // Verschiedene Aktionen von selbst implementieren // MIT GET -UND METHODEN VERLAGEN .../****************** @Resource Protected Accountservice Accountservice; // Domänenobjekt geschützte Karte <String, Objekt> Anforderung; geschützte Karte <String, Objekt> Sitzung; Protected Map <String, Objekt> Anwendung; @Override public void setApplication (map <String, Objekt> Anwendung) {this.application = application; } @Override public void setSession (map <String, Objekt> Sitzung) {this.Session = session; } @Override public void setRequest (MAP <String, Objekt> Anforderung) {this.Request = request; } // modelldelen geschütztes T -Modell; @Override public t getModel () {parameterizedtype type = (parameterizedtype) this.getClass (). GetGenerics -uperClass (); Class clazz = (class) type.getActualtTypeargumente () [0]; try {model = (t) clazz.newinstance (); } catch (Ausnahme e) {neue runTimeException (e) werfen; } Rückgabemodell; }} OK, nach der Verbesserung der Basiskategorie können wir die QueryJoinAccount -Methode in der Kategorie schreiben. Wir löschen alle ursprünglichen Methoden in der Kategorie, da diese beim Aufbau der Umgebung zuvor zum Testen verwendet wurden und nicht mehr benötigt wurden. Jetzt haben wir den Projektcode wirklich begonnen:
@Controller ("categoryAction") @Scope ("Prototyp") öffentliche Klassenkategorie erweitert Baseaction <Gegategorie> {public String queryJoinAccount () {// wird verwendet, um die Daten von Paging pagemap = new Hashmap <String, Object> () zu speichern; // Abfragen Sie die entsprechenden Daten basierend auf Schlüsselwörtern und Paging -Parametern. Wir haben diese Methode im Service geschrieben. Zu diesem Zeitpunkt haben wir die Cascading -Abfrageliste <kategorie> categoryList = categoryService.QueryjoinAccount (model.ettype (), Seite, Zeilen) abgeschlossen; pagemap.put ("Zeilen", CategoryList); // im JSON -Format gespeichert. Aus der JSON -Datei im vorherigen Abschnitt ist ersichtlich, dass ein Schlüssel insgesamt und ein Schlüssel Zeilen ist. Hier speichern wir zuerst die Zeilen. // Abfragen Sie die Gesamtzahl der Datensätze basierend auf den Schlüsselwörtern Long Total = categoryService.getCount (model.gettType ()); // Diese Methode wurde nicht geschrieben. Gehen wir zur Serviceschicht, um sie später zu verbessern // system.out.println (insgesamt); pagemap.put ("total", insgesamt); // Speichern Sie es im JSON -Format und speichern Sie die Gesamtrückgabe "JSONMAP"; }} Auf diese Weise haben wir die Aktion geschrieben. In der Aktion wird nun die Parameter von der Rezeption gesendet und dann die Gesamtzahl der Datensätze des angegebenen Typs und alle Produkte des angegebenen Typs gemäß den Parametern abfragen. Es wird gemäß den in JSON festgelegten Schlüssel (d. H. Gesamt und Zeilen) gespeichert und in die HashMap platziert. Danach kann die Daten in diesem HashMap in das JSON -Format verpackt und an die Rezeption gesendet werden, sie kann von DataGrid angezeigt werden. Wir haben zuerst diesen HashMap eingestellt, zuerst den Service -Layer -Code verbessern und dann die Daten in diesem HashMap verpacken.
3. CategoryService verbessern
Aus der obigen Kategorie können wir feststellen, dass eine GetCount -Methode zum Kategorieservice hinzugefügt werden muss und sie wie folgt in der spezifischen Implementierungsklasse implementiert werden muss:
// CategoryService Interface Public Interface CategoryService erweitert BaseSeService <kategorie> {// Abfragen Kategorieinformationen, Kaskadierungsadministrator Public List <Gategorie> queryJoinAccount (String -Typ, int Seite, int -Größe); // Abfragen Sie den Namen der Kategorie an // Abfragen Sie die Gesamtzahl der Datensätze basierend auf Keywords öffentlich Long GetCount (String -Typ); } // categoryServiceImpl implementieren Sie Klasse @SuppressWarnings ("Unbekämpft") @Service ("categoryService") öffentliche Klassenkategorie -ServiceImpl erweitert BaseServiceImpl <category> implements categoryService {@Override öffentlich <category> queryjoinaccount (String -Typ, Int -Page). C.Type wie: Typ "; return getSession (). createEquery (HQL) .setString ("Typ", "%" + type + "%") .setFirstresult (((Seite)) * Größe) // Zeigen Sie aus der ersten ein. } @Override public Long getCount (String -Typ) {String hql = "Wählen Sie Count (c) aus Kategorie C, wobei C.Type wie: Typ"; return (long) getSession (). createEquery (HQL) .SetString ("Typ", "%" + Typ + "%") .unikeResult (); // einen Datensatz zurückgeben: Gesamtzahl der Datensätze}} Bisher wurde der Weg zum Erhalten von Daten in dieser Datenbank geöffnet. Die ersten beiden Schritte wurden ausgeführt, um Daten aus der Rezeption-> Datenbank-> abzurufen, und dann beginnen wir, die in der HashMap gespeicherten Daten zu verpacken und dann an die Rezeption zu senden.
4. Konfigurieren Sie Struts.xml
Verpackung Die angegebenen Daten können durch Konfiguration in Struts.xml abgeschlossen werden. Schauen wir uns zunächst die Konfiguration in Struts.xml an:
<Struts> <Constant Name = "Struts.DevMode" value = "true"/> <package name = "shop" extends = "json-Default"> <!-Jason-Default erbt Struts-Default-> <global-results Konfiguriert im Frühjahr, weil es an Spring Management übergeben werden soll-> <Action name = "category_*" method = "{1}"> <! Blacklists, filtern unnötige Optionen und unterstützen den regulären Ausdruck JSON-Format: {Gesamt: 3, Zeilen: [{Konto: {ID: 2, Login: "Benutzer", Name: "Kundendienst a", "user"}, Hot: Id: 3, ...}}-> <paramname = "NOREPROPRETIES". Hier. Ein Fehler in CSDN, ich werde das Bild folgen und es unten fügen-> </param> </result> </action> <actionname = "account_*" method = "{1}"> <result name = "index">/index.jsp </result> </action> <!-Die Aktion, die zur Vervollständigung der Systemanforderung verwendet wird. name = "send">/webinf/{1}/{2} .jsp </result> </action> </package> </struts>Aus der obigen Konfiguration können wir zunächst sehen, dass das Paket JSON-Default erben muss, da JSON-Default Struts-Default erbt, da es im JSON JAR-Paket ein Struts2-Json-Plugin-2.3.24.1.jar gibt. Sie können es öffnen und sehen, dass es im Inneren ein Streben-plugin.xml gibt. Sie können es öffnen und sehen, dass JSON-Default Struts-Default erbt:
Als nächstes konfiguriere ich <Elust>, der Name ist die String, die nur nach Aktion zurückgegeben wird, und der Typ muss in JSON übereinstimmen. Dann sind die Parameter im Ergebnis. Zunächst der Parameter, der mit dem Namen als Root übereinstimmt werden muss. Dieser Parameter muss in das HashMap -Objekt übereinstimmt, das gerade jetzt konvertiert werden muss, das heißt, die von uns definierte Pagemap. Mit der Konfiguration dieses Parameters verpackt Struts die Daten im Pagemap in das JSON -Format. Konfigurieren Sie dann die schwarze Liste. Die Blacklist bedeutet, Streben mitzuteilen, welche Felder bei der Verpackung nicht verpackt werden müssen, z. B. Informationen zu Administratorkennwörtern. Aus dem Jason -Format im obigen Kommentar können Sie sehen, dass Zeilen [0]. Account.Pass das Feld Kennwort darstellt, aber es müssen mehr als eine Daten vorhanden sein, sodass wir reguläre Ausdrücke verwenden müssen, um es darzustellen, damit alle Passwörter nicht in JSON verpackt werden.
5. Änderung von query.jsp -Inhalt ändern
Zu diesem Zeitpunkt haben wir die Daten in das JSON -Format verpackt. Als nächstes verbessern wir den Inhalt der Front-End-Abfrage.jsp, um Datagrid korrekt anzeigen:
<%@ page Language = "java" import = "java.util. $(function(){ $('#dg').datagrid({ //url address is changed to request categoryAction url:'category_queryJoinAccount.action', loadMsg:'Loading......', queryParams:{type:''}, //type parameters, there is no need to pass specific types here, because we want to display all //width:300, fitColumns:true, Striped: True, Nowrap: Richtig, SingleSelect: True, Pagination: True, Rowstyler: Funktion (Index, Row) {Console.info ("Index" + Index + "," + row) if (index % 2 == 0) {return 'Hintergrund-Color: #fff;'; {Feld: 'Checkbox', Checkbox: TRUE}, {Feld: 'ID', Titel: 'Nummer', Breite: 200} // Die Feldfelder sollten hier übereinstimmen wie in der Datenbank. "<span>" + Wert + "</span>"; }}, {field: 'hot', title: 'hot', width: 100, // field hot formatter: function (value, zeile, index) {if (value) {// wenn es hot ist, der Wert ist wahr und der Wert ist eine boolean variable return "<input type // tick} else {return "<Eingabe type = 'CheckBox' disable = 'true'"; // nicht}}}, {field: 'account.login', title: 'Administrator', Breite: 200, //account.loginadministrator Login Name Formatatter: Funktion (Wert, Zeile, Index) {if (row.account! = Null && row.account.login! // Wenn der Anmeldenname nicht leer ist, anzeigen Sie den Login -Namen} else {return "Es gibt keinen Administrator in dieser Kategorie"; }}}]}); }); </script> </head> <body> <table id = "dg"> </table> </body> </html> 6. Test zeigt die Ergebnisse
Lassen Sie uns schließlich die Anzeigeergebnisse von DataGrid wie folgt testen:
Zu diesem Zeitpunkt haben wir Struts2 und JSON erfolgreich integriert, und jetzt können wir Daten im JSON -Format in den Vordergrund übertragen.
(HINWEIS: Am Ende werde ich den Quellcode -Download des gesamten Projekts angeben! Jeder kann gerne sammeln oder teilen.)
Originaladresse: http://blog.csdn.net/eson_15/article/details/51332758
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.