Vorwort
Warum konverter in Struts2 eingeben?
: Struts2 kann nur eine automatische Konvertierung für 8 Originaltypen in Java und gemeinsame Typen wie Zeichenfolge und Datum bereitstellen.
Dies kann jedoch definitiv nicht unseren Bedürfnissen erfüllen, wenn wir die Seitendaten in einen Javabäer integrieren möchten. Wenn Sie zur Aktion gehen, erhält die Aktion ein Objekt, sodass wir einen Typkonverter verwenden müssen.
Die meiste Zeit kann die Verwendung des in eingebauten Typs und OGNL-basierten Typ-Konverters, der vom Struts2-Framework bereitgestellt wird, die meisten Typ-Conversion-Anforderungen erfüllen. Es gibt jedoch einige spezielle Fälle, in denen möglicherweise eine Zeichenfolge eines angegebenen Formats in ein zusammengesetztes Objekt umgewandelt werden muss und ein benutzerdefinierter Typkonverter erforderlich ist. Wenn der Client beispielsweise eine Zeichenfolge wie "Jelly | 123456" an den Server sendet, müssen wir diese Zeichenfolge in eine Benutzertypinstanz konvertieren, mit "Gelee" als Benutzername und "123456" als Benutzerkennwort.
Custom Type Conversion Class
Es gibt eine solche Rezeption wie diese:
<form action = "login" method = "post"> user: <input type = "text" name = "userInfo"> <br> <Eingabe type = "value =" convert "> </form>
Der entsprechende Aktionscode lautet:
privater Benutzerbenutzer; // Dies ist ein zusammengesetzter Typ privater String -Tipp; public void setUsers (Benutzer Benutzer) {this.user = user;} public user getUser () {return user;}Wir hoffen, dass der Benutzer eine Zeichenfolge in der Vordergrundseite mit dem Format "Benutzernamen | Passwort" eingibt und die Zeichenfolge im Format von "Benutzername | Passwort" über einen benutzerdefinierten Konverter in den Benutzertyp umwandelt. Lassen Sie uns darüber sprechen, wie Sie einen benutzerdefinierten Konverter implementieren.
Der Typ -Konverter von Struts2 basiert tatsächlich immer noch auf dem OGNL -Framework. Das OGNL -Projekt befindet sich eine TypeConverter -Schnittstelle, die die Schnittstelle ist, die von einem benutzerdefinierten Typkonverter implementiert werden muss. Der Definitionscode dieser Schnittstelle lautet wie folgt:
// Ognl bietet öffentliche Schnittstelle TypeConverter {öffentliches Objekt convertValue (MAP -Kontext, Objektziel, Mitgliedsmitglied, String PropertyName, Objektwert, Klasse Totype);}Um einen Typkonverter zu implementieren, müssen Sie den oben genannten TypeConverter implementieren. Die Methoden in der obigen Schnittstelle sind jedoch zu komplex, sodass das OGNL -Projekt auch eine Implementierungsklasse für diese Schnittstelle bietet: DefaultTypeConverter, bei der diese Klasse normalerweise erweitert wird, um benutzerdefinierte Typkonverter zu implementieren. Um einen benutzerdefinierten Typkonverter zu implementieren, muss die CONVERTVALUE -Methode der DefaultTypeConverter -Klasse überschreiben.
Im Folgenden ist die Konvertierungsklasse in eine Benutzerklasseninstanz konvertiert:
öffentliche Klasse UserConverter erweitert DefaultTypeConverter {public Object ConvertValue (Kartenkontext, Objektwert, Klasse Totype) {if (Totype == user.class) {// Wenn Sie einen String in den Benutzertyp des Systems des Systems konvertieren müssen. // Erstellen Sie eine Benutzerinstanz user user = new user (); // Verarbeiten Sie nur das erste Array -Element des Anforderungsparameterarrays und teilen Sie die Zeichenfolge in zwei Zeichenfolgen mit dem '|' auf Symbol String [] uservalues = params [0] .Split ("// |"); // dem Benutzerinstanz user.setName (uservalues [0]) einen Wert zuweisen; user.setPassword (uservalues [1]); Benutzer zurückgeben; } else if (Totype == string.class) {// Wenn es erforderlich ist, den Benutzertyp in einen String user user = (Benutzer-) Wert zu konvertieren; return "<" + user.getName () + "|" + user.getPassword () + ">"; } return null; }}Die Funktion der CONVERTVALUE -Methode ist sehr einfach. Diese Methode ist für den Abschluss der Typumwandlung verantwortlich, diese Konvertierung ist jedoch bidirektional. Der Zieltyp wird anhand des Parameter -Totyps beurteilt, und dann können wir die Konvertierungslogik in zwei Richtungen implementieren.
Registrieren Sie einen Typkonverter
Es reicht nicht aus, einen Typkonverter zu haben, da das Struts2 -Framework nicht weiß, wann diese Typkonverter verwendet werden sollen. Daher muss der Typkonverter in der Webanwendung registriert werden, sodass das Struts2 -Framework diesen Typkonverter normalerweise verwenden kann.
Struts2 unterstützt hauptsächlich die folgenden zwei Möglichkeiten, um Typkonverter zu registrieren:
Sprechen wir über die beiden oben genannten Methoden zur Registrierung von Typkonvertern.
Lokaler Typkonverter
Mit Struts2 können Entwickler Konfigurationsinformationen für die Typ -Konvertierung über lokale Typ -Conversion -Dateien angeben. Eine Typ -Conversion -Datei ist eine gewöhnliche Eigenschaften (*.Properties) -Datei. Der Dateiname der lokalen Typ -Konvertierungsdatei sollte in der Form von ActionName -Conversion.Properties enthalten sein, wobei ActionName der Aktionsname ist, der mit diesem Typ in die Datei konvertiert werden muss, und die nachfolgende Konvertion.Properties -Zeichenfolge ist ein fester Teil. Die Typ -Konvertierungsdatei sollte an derselben Stelle wie die Aktionsklassendatei platziert werden.
Nachdem wir über die lokale Conversion -Datei gesprochen haben, sprechen wir weiter über den registrierten lokalen Typkonverter. Um einen lokalen Typkonverter zu registrieren, müssen Sie der lokalen Konverterdatei nur die folgende Konfigurationszeile hinzufügen:
<Propname> = <ConverterClass>
Ersetzen Sie den oben genannten <PROPNAME> durch die Eigenschaft, die vom Typ konvertiert werden muss, und ersetzen Sie die <ConverterClass> durch die Implementierungsklasse des Typ-Konverters. Für die oben implementierte USerconverter -Klasse ist es erforderlich, sie wie folgt in der lokalen Conversion -Datei zu konfigurieren:
# Um das Benutzerattribut anzugeben, müssen Sie die UserConverter -Klasse verwenden, um den Typ Conversion zu vervollständigen.
Globaler Typkonverter
Die Einschränkungen lokaler Typkonverter sind zu offensichtlich und können nur an bestimmten Aktionen und festgelegten Eigenschaften arbeiten. Wenn jedoch mehrere Aktionen in der Anwendung Attribute des Benutzertyps oder eine Aktion enthalten, die Attribute des Mehrbenutzertyps enthalten, ist es für die Verwendung eines globalen Typs -Konverters angemessener.
Der Global Type Converter funktioniert nicht für die angegebenen Eigenschaften der angegebenen Aktion, sondern für den angegebenen Typ. Zum Beispiel funktioniert es für alle Eigenschaften des Typs com.jellyThink.Practise.User.
Die Registrierung eines globalen Typs-Konverters sollte eine Xwork-Conversion.Properties-Datei bereitstellen, die die globale Konverterdatei ist. Sie müssen die Datei direkt unter dem Web-Inf/Class-Pfad der Webanwendung platzieren.
Der Inhalt der globalen Konvertierungsdatei der globalen Typ -Konvertierung besteht aus multiplen <PotType> = <ConvertClass> Elementen. Ersetzen Sie ProTTYPE durch den Typ, der Typ konvertiert werden muss, und ersetzen Sie die ConvertClass durch die Implementierungsklasse des Typ -Konverters. Für die oben implementierte UserConverter -Klasse ist es erforderlich, sie wie folgt in der Global Type Conversion -Datei zu konfigurieren:
com.jellythink.practise.user = com.jellythink.Practise.USerConverter
"Lokal" gegen "global"
Lokale Typumwandlung kann nur das angegebene Attribut der angegebenen Aktion konvertieren. Unabhängig davon, ob das Attribut der Aktion ein Array oder ein Sammelart ist, wandelt die Konvertierungsmethode des Konverters das Attribut nur einmal um. Wenn eine Aktion über einen List <Benerfolg> Eigenschaftsbenutzer verfügt, ruft der lokale Typ -Konverter die Methode ConvertValue () nur einmal auf, wodurch der Parameter für Benutzeranforderungen gleichzeitig in ein List <Benetzungs -Sammlungsobjekt umgewandelt wird.
Der Global Type Converter konvertiert alle actionspezifischen Typen. Wenn das Attribut einer Aktion ein Array- oder Sammelart ist und das Array- oder Sammelelement die Methode ist, bei der der Konverter konvertiert werden muss, wandelt der globale Typ -Konverter nicht das gesamte Set -Attribut um, sondern wandelt jedes Element des Set -Attributs um. Das heißt, wenn das Attribut ein Array oder eine Sammlung ist, enthält das Array oder die Sammlung mehrere Elemente des Typs, dann wird die Methode convertValue () mehrmals aufgerufen.
Nachdem ich mich mit dem Unterschied zwischen den beiden vertraut gemacht habe, werde ich ihm in meiner zukünftigen Arbeit mehr Aufmerksamkeit schenken. insbesondere der Unterschied zwischen Array- und Setelementen beim Umwandeln.
Benutzerdefinierter Typkonverter basierend auf Struts2
Die obige Einführung der Konvertierungsrichtung, indem die Standard -Type -RedConverter -Klasse in einer Konvertierungs -Methode erbt wird, wird die Konversionsrichtung durch Beurteilung des Totyp -Parameters beurteilt, und dann wird die Konvertierungslogik für verschiedene Konvertierungsanweisungen separat implementiert. Im Rahmen von STRUTS2 wird eine StrudTypeConverter -Abstract -Klasse speziell zur Verfügung gestellt, um die Implementierung von Typkonvertern zu vereinfachen. Dies ist eine Unterklasse der DefaultTypeConverter -Klasse. Es hat die CONVERTVALUE -Methode der DefaultTypeConverter -Klasse implementiert. Bei der Implementierung dieser Methode wird die Konvertierung in zwei verschiedene Richtungen verwandelt, indem der Totyp -Parameter in der ConvertValue -Methode in die folgenden zwei verschiedenen Methoden aufgerufen wird:
Was wir tun müssen, ist, die strutstypeConverter -abstrakte Klasse zu erben und die beiden abstrakten Methoden zu implementieren: ConvertfromString und ConvertToString.
Der geänderte Code lautet wie folgt:
Public Class UserConverter erweitert StrutstypeConverter {public Object ConvertFromString (MAP -Kontext, String [] Werte, Klasse toclass) {user user = new user (); String [] uservalues = values [0] .Split ("// |"); user.setName (uservalues [0]); user.setPassword (uservalues [1]); Benutzer zurückgeben; } public String convertToString (MAP -Kontext, Objekt O) {// Wenn es erforderlich ist, den Benutzertyp in einen String user user zu konvertieren = (Benutzer) o; return "<" + user.getName () + "|" + user.getPassword () + ">"; }}Zusammenfassen
Dieser Artikel fasst den benutzerdefinierten Konverter in Struts2 im Detail zusammen, und die Gesamidee lautet wie folgt:
Nur ein paar Schritte, um den benutzerdefinierten Konverter durchzuführen.
Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.