Die Aktionsentwicklung wird durch Erben der AktionSverpackungsklasse abgeschlossen. Die AktionSverpackungsklasse implementiert nicht nur die Aktionsschnittstelle, sondern unterstützt auch Unterstützung für die Überprüfung und Lokalisierung. Benutzerdefinierte Aktionen in der realen Entwicklung müssen diese Klasse erben. Formularüberprüfungsfunktion für die Benutzeranmeldung hinzufügen
Die Rolle der ActionVort -Klasse:
Struts2 verlangt nicht in der Aktionsklasse, die wir für die Basisklasse oder die Strids -Schnittstelle für Struts erben. Um die Implementierung unserer eigenen Aktionen zu erleichtern, werden wir in den meisten Fällen die com.opensymphony.xwork2.actionsupport -Klasse erben und die öffentliche String -Execute () die Ausnahmemethode in dieser Klasse überschreiben. Da es in dieser Klasse viele praktische Ausreden gibt, werden viele Standardmethoden bereitgestellt, einschließlich internationaler Informationsmethoden, Standardmethoden zur Verarbeitung von Benutzeranfragen usw., die die Entwicklung von Akion erheblich vereinfachen können. In Struts2 wird in der Regel direkt verwendet, um HTTP -Anforderungsparameter zu verkapulieren. Daher sollte die Aktionsklasse auch Attribute enthalten, die den Anforderungsparametern entsprechen, und entsprechende Getter- und Setter -Methoden für die Attribute bereitstellen.
Was ist der Unterschied zwischen der Aktionsschnittstelle und der AktionSverpackungsklasse?
Die Aktionsschnittstelle hat:
public static final String scqua = "success"; public static final String none = "none"; public static final String error = "error"; public static final String login = "login"; public String execute () löst Ausnahme aus;
Sie können sehen, dass es fünf statische Konstanten gibt und () () mit Rückgabetyp String
Auf der Grundlage der Implementierung der Aktionsschnittstelle definiert die ActionVort -Tool -Klasse auch eine Validate () -Methode. Wenn die Methode überschrieben ist, wird sie vor der Methode execute () ausgeführt. Wenn die Überprüfung fehlschlägt, wird sie auf die Eingabe übertragen. Das Eingabeattribut muss bei der Konfiguration der Aktion konfiguriert werden.
Darüber hinaus stellt ActionVortePort eine GetText -Methode (String Key) bereit und realisiert die Internationalisierung, die Internationalisierungsinformationen aus Ressourcendateien erhält.
Auf diese Weise können Sie beim Anpassen des Tags eine Variable als neues ActionVort -Objekt definieren, um die Internationalisierung zu erreichen.
Die ActionVort -Klasse hat (Quellcode):
öffentliche Klassenaktion implementiert Aktion, validierbar, validationaware, textProvider, localeProvider, serialisierbar {geschützter statischer Logger log = loggerfactory.getLogger (actionupport.class); private endgültige validationAwaresupport -validationAware = Neue ValidationAwaresupport (private transient tecrovimer teufrovider teufrovider teufrovimer tectioner tectionRrows tectionRrows tectionRrows tectioner tectioner); ErrorMessages) {validationAware.setActActActionErrors (ErrorMessages);} public collection <string> getActaTActionErors () {return validationAware.getActionErrors ();} public void setActionMessages (collection <string> messages) {validationAware.setactionMessages (Messages); validationAware.getActionMessages();}@Deprecatedpublic Collection<String> getErrorMessages() {return getActionErrors();}@Deprecatedpublic Map<String, List<String>> getErrors() {return getFieldErrors();}public void setFieldErrors(Map<String, List<String>> errorMap) {validationAware.setFielderrors (errormap);} public map <String, Liste <String >> getFielderRors () {return validationAware.getFielderRors ();} public locale getlocale () {actioncontext ctx = actioncontext.getContext.tx.getX (); {if (log.isdebugenabled ()) {log.debug ("Aktionskontext nicht initialisiert");} return null;}} public boolean haskey (String key) {return getTextProvider (). Haskey (Key); AtextName, String DefaultValue) {return getTextProvider (). GetText (AtextName, DefaultValue);} public String GetText (String textName, String defaultValue, String obj) {return getTextProvider (). {return getTextProvider (). getText (textName, args);} public String getText (String Key, String [] args) {return getTextProvider (). DefaultValue, args);} public String getText (String -Schlüssel, String DefaultValue, String [] args) {return getTextProvider (). args, stack);} public String getText (String -Schlüssel, String defaultValue, String [] args, Valuestack Stack) {return getTextProvider (). GetText (Schlüssel, defaultValue, args, stack);} public String getFormatted (String -Taste, String -Extr. ActionContext.getContext (). GetConversionErrors (); if (ConversionErrors.ContainsKey (expr)) {String [] vals = (String []) ConversionErrors.get (expr); return vals [0];} else {Final Valuestack = ActionContext.GetContext (). GetValuestack (). EVERTACK.FINDVALUE (EXPR); Return getText (Schlüssel, Arrays.aslist (Val));}} public Resourcebundle getTexTs () {return getTextProvider (). getTextexte ();} public ressourcebundle -getTeTexts (String -Häufigkeit) {{returnAid {return getTexTProvider (). AddActActionError (String Anerrormessage) {validationAware.addactionError (AnerrorMessage);} public void addActionMessage (String Amessage) {validationAware.addactionMessage (Amessage);} public void addfielror (String Fieldname, Streicher ErrorMessage) {validationArtaware. String Input () löst Ausnahme {return Input;} public String dodefault () aus. validationAware.haserrors ();} public boolean hasFielderrors () {return validationAware.hasfielderrors ();} public void clearFielderrors () {validationAware.clearfielrors (); oder Super.clone ();} public void pause (String -Ergebnis) {} private textProvider getTextProvider () {if (textProvider == null) {textProviderfactory TPF = new textProviderfactory (); if (container! this);} return textProvider;}@injectPublic void setContainer (Container Container) {this.container = container;} Sie können sehen, dass es viele Methoden gibt, aber wir sehen offensichtlich, dass es eine Methode gibt, die wir sehr gut kennen, validieren () und Datenüberprüfung. Durch diese Methode können wir beim Anmelden auffordern, der Benutzername und das Passwort leer sind oder andere ...
Geben Sie nun ein einfaches Beispiel: Wenn der Benutzername und das Passwort leer sind, geben Sie dem Kunden eine freundliche Eingabeaufforderung.
Im Folgenden finden Sie zwei Möglichkeiten, um die Datenüberprüfungsfunktion von Struts 2 zu erklären.
1. Überprüfung der Codierungsmethode
1) Aktion muss von der Aktionsversorgung vererbt werden
2) Schreiben Sie eine öffentliche void validatexxxx () -Methode, damit eine Anforderungsverarbeitungsmethode überprüft werden soll, und die Formulardatenüberprüfung innerhalb der Methode durchführen.
3) Sie können auch die Methode für öffentliche void validate () für alle Anforderungsverarbeitungsmethoden schreiben.
4) In der Verifizierungsmethode können Sie die Fehlermeldung der Feldverifizierung über die Methode addFielderRor () hinzufügen.
5) Wenn die Überprüfung fehlschlägt, springt das Struts -Framework automatisch zur Ergebnisseite mit Nameneingabe. Auf der Seite "Überprüfungsfehler" können Sie <S: Fielderror/> verwenden, um Fehlermeldungen anzuzeigen
6) Einfach und flexibel. Aber es ist nicht sehr wiederverwendbar
Schreiben Sie die Validierungsmethode neu
1. Die Aktion, die wir im Allgemeinen geschrieben haben, erbt und actionupport, und ActionVerformation implementiert nicht nur die Aktionsschnittstelle, sondern implementiert auch die validierbare Schnittstelle, wobei die Funktion zur Datenüberprüfung bereitgestellt wird. Definieren Sie eine Validierungsmethode in der validierbaren Schnittstelle, überschreiben Sie die Methode, wenn ein Fehler im Feld des Bestätigungsformulars auftritt, den Fehler zum Feldderrorfeld der AktionSverpackungsklasse hinzufügen und sie dann durch den OGNL -Ausdruck ausgeben.
Im Folgenden ist die Benutzeranmeldungs -Überprüfungsschnittstelle für Benutzer:
<Body> <%-Informationen zur Ausgabeverifizierung-%> <%-Wenn Sie eine einzelne Eingabeaufforderung möchten <s: Fielderror fieldname = "uname"/>-%> <%-<s: Eigenschaft value = ""/>-%> <div style = "color: rot"> <s: fielderror/> </div> <s: Formular name = "nameSpace =" action = "loginValidateAction"> <s: div> Bitte geben Sie den Benutzernamen ein: <s: textField name = "user -%> <S: Debug> </s: Debug> </body>
Nachdem der Benutzer die Daten eingegeben hat, senden Sie sie an LoginValidateAction:
LoginvalidateAction für öffentliche Klasse erweitert die Aktion implementiert Aktion {öffentlicher Benutzer; public map <String, Objekt> MAP; // Die Verifizierungsmethode funktioniert an allen Aktionen @Override public void void () {if (user.getuname (). Länge () == 0) {addfielderror ("uname", "Der Benutzername" Der Benutzername "," Der Benutzername "," Der Benutzername nicht leer! ");"). if (user.getUpwd (). Länge () == 0) {addFielderror ("upwd", "Passwort kann nicht leer sein!");}} // Methoden zum Umgang mit Business Public String löst Ausnahme aus {System.out.println (user.getuname ()); if (user.getuname (). Equals ("admin") && user.getUpwd (). Equals ("admin") {// lass Struts2 Inject Map Collection Map.put ("Uname", user.getuname (); // // Wenn der Lobe erfolgreich ist, ist der Lob der Loge, Loggin, ist erfolgreich. Errorreturn -Eingabe; // Dies muss eingegeben werden Die oben genannte Anmeldemethode überschreibt die Validierungsmethode, die vor der Ausführung der Excute -Methode ausgeführt wird. Wenn nach der Ausführung der Methode der FileDerror der Aktionsklasse einen Datenüberprüfungsfehler enthält, wird die Anforderung an die logische Eingabeansicht weitergeleitet.
Struts.xml ist wie folgt konfiguriert:
<!-Datenüberprüfung-> <Action name = "loginvalidateAction"> <!-Wenn das Ergebnis "Erfolg" ist, springen Sie zum Erfolg. name = "login"> fail.jsp </result> <result name = "error"> fail.jsp </result> </action>
Auswirkungen auf den Kunden:
Aber haben Sie bemerkt, dass der Effekt, den wir wollen, nicht der Effekt ist, wenn der Fehler aufgefordert wird.
Das wollen wir nicht. Wie können wir es ändern? In der Tat zeigt dies hauptsächlich den Struts2 -Themenstil,
Schauen wir uns noch einmal an:
Es fügt uns automatisch Stile hinzu. Struts2 liefert drei Themen, ajax, einfach, xhtml. Es ist standardmäßig mit dem XHTML -Thema. Natürlich können Sie eines Ihrer eigenen Themen schreiben, die wir benutzerdefinierten Themen bezeichnen. Die oben genannten Probleme können gelöst werden, indem sie festgelegt werden
Es gibt zwei Möglichkeiten, es zu lösen:
1. Einfache Methode (auch praktisch für alle Struts2 -Tags) fügen Sie die nächste Codezeile in Struts.xml hinzu.
<konstant name = "struts.ui.theme" value = "einfach" />
Dies bedeutet, dass alle Seiten das einfache Thema verwenden. Zu diesem Zeitpunkt fügt die Ausgabe auf der Seite, die es ausgibt, keinen unnötigen Code hinzu, wie z. B. Tabelle Tr td usw., und wir können den Stil der Seite wie andere Bearbeitungsseiten bearbeiten.
Schauen wir uns das Fehleraufforderungsformat an
Wir können wie folgt ein Tag einstellen:
<s: Eigenschaft value = "fehler.uname [0]"/>
Kommentieren Sie dieses Tag:
<div style = "color: rot"> <s: fielderror/> </div>
Aber wenn wir es so festlegen, tritt dieser Effekt auf.
Dieser Effekt ist ein bisschen wie die Eingabeaufforderung, wenn wir normalerweise Fehler eingeben, und es gibt andere Attributwerte, sodass wir sie nicht nacheinander auflisten müssen.
Überprüfungsgerüst mit Struts2
XML -Konfigurationsüberprüfung.
Führt vor der Codierung aus.
1) Damit die Aktionsklasse überprüft werden soll, schreiben Sie eine Verifizierungsregel-Datei mit dem Namen: Aktionsklassen Name-Validation.xml unter demselben Paket.
2) Fügen Sie der Verifizierungsregeldatei Überprüfungsregeln hinzu: Für bestimmte Bestätigungsgerätenamen finden Sie die Referenz von Struts2 oder der API von Struts2.
a) Feldüberprüfung: Regeln zur Überprüfung jedes Feldes nicht der Kundenspanne in der Aktionsklasse.
<Feldname = "Feldname zu verifizieren"> <Feldvalidator type = "Lineal-Name überprüfen" Short-circuit = "Ob kurze Pfadüberprüfung sein soll (Standard ist falsch)"> <param name = "Parametername, die vom Verifier verwendet werden"> Wert </param> <Meldungen> Eingabeaufforderung.
b) Nichtfeldverifizierung: Verwenden Sie den OGNL-Ausdruck für die kombinatorische Überprüfung für bestimmte Felder in der Aktionsklasse.
<validator type = "fieldExpression"> <param name = "fieldname"> pwd </param> <param name = "fieldname"> pwd2 </param> <param name = "expression"> <! [CDATA [PWD == PWD2]]> </param> <!-OGNL-Expression-> <Message> Kennwort und Passwort und Passwort und Passwort und Passwort und Passwort Incordent </messing </messure> </message>
c) Besucherüberprüfung: Es wird hauptsächlich verwendet, um das Feld benutzerdefinierter Typ in der Aktionsklasse zu überprüfen. (Zur Verwendung des modellgesteuerten Modus)
i) Verwenden Sie die Überprüfungsregeln für benutzerdefinierte Typen in der Datei für Bestätigungsregeln der Aktionsklasse.
<!-Verwenden Sie die Besucherüberprüfung für benutzerdefiniertes Feld-> <Feldname = "Benutzer"> <Feld-Validator type = "Erforderlich" Short-circuit = "true"> <meldungen> USSAGE-Informationen erforderlich </message> <!-Nachrichtenpräfix-> </Feld-Validator> <Feld-Validator Typ ". name = "context"> userContext </param> <!-Geben Sie den Kontextnamen für diese Besucherverifizierung an-> <param name = "appendprefix"> true </param> <!-Ob das Präfix der Verifizierungsfehlermeldung hinzugefügt wird-> <meldungen> USSAGE </message> <!-Message Prefix-> </field-field-validator> </field> </field
ii) Schreiben Sie eine Verifizierungsregeldatei für das Feld des Besucheres. Der Dateiname lautet: Besucherfeldtyp Name [-visor-Verifizierungskontextname] -Validation.xml. Zum Beispiel: Der Dateiname in diesem Beispiel ist userocontext-validation.xml
Hinweis: Diese Datei sollte in dem Paket gespeichert werden, in dem sich der Besucherfeldtyp befindet.
iii) Überprüfungsregeln für das Feld in der Feldüberprüfungsdatei des Besuchers hinzufügen.
Wir können auch die Datenüberprüfung durchführen, indem wir eine Überprüfungskonfigurationsdatei hinzufügen, ohne die Validierungsmethode neu zu schreiben. Diese Überprüfungskonfigurationsdatei vervollständigt die Überprüfung des Formularfelds mithilfe des vorhandenen Überprüfungsgeräts in Struts2. Nehmen Sie hier das erforderliche Verifizierungsgerät als Beispiel. Dieses Überprüfungsgerät ist ein erforderliches Verifizierungsgerät, das angibt, dass ein bestimmtes Formularfeld eingegeben werden muss.
Das Folgende ist der Weg, um die LoginvalidateAction-Validation.xml dieser Verifizierungskonfigurationsdatei zu schreiben:
<? type = "fordernString"> <nachricht> Der Benutzername kann nicht leer sein </message> </field-Validator> </field> <field name = "upwd"> <field-Validator type = "fordertstring"> <meldung> Passage kann nicht leer sein </message> </field-validator> <fest-Validator Typ = "Stringlänge"> </</<Param> </<Param> </<-Params "> </<- name = "minLength"> 6 </param> <meldung> Die Durchgangslänge sollte zwischen $ {minLength}-$ {maxLength} Bits </message> </field-Validator> </field> </validators> liegen Hinweis: Diese Verifizierungskonfigurationsdatei muss den folgenden zwei Regeln entsprechen:
1. Das Schicksalsformat der Datei muss der Aktionsklassenname -Validation.xml sein. In diesem Beispiel lautet der Dateiname beispielsweise: loginvalidateAction-validation.xml
2. Die Datei muss sich auf dem gleichen Pfad wie die Klassendatei der Aktionsklasse befinden. In diesem Beispiel ist die Datei in
Der Code der LoginvalidateAction -Klasse ist derselbe:
LoginvalidateAction für öffentliche Klasse erweitert die Aktion implementiert Aktion {öffentlicher Benutzer; public map <String, Objekt> MAP; // Die Verifizierungsmethode funktioniert an allen Aktionen @Override public void void () {if (user.getuname (). Länge () == 0) {addfielderror ("uname", "Der Benutzername" Der Benutzername "," Der Benutzername "," Der Benutzername nicht leer! ");"). if (user.getUpwd (). Länge () == 0) {addFielderror ("upwd", "Passwort kann nicht leer sein!");}} // Methoden zum Umgang mit Business Public String löst Ausnahme aus {System.out.println (user.getuname ()); if (user.getuname (). Equals ("admin") && user.getUpwd (). Equals ("admin") {// lass Struts2 Inject Map Collection Map.put ("Uname", user.getuname (); // // Wenn der Lobe erfolgreich ist, ist der Lob der Loge, Loggin, ist erfolgreich. Errorreturn -Eingabe; // Dies muss eingegeben werdenDas obige ist die Funktion und Lösung der Streben 2 -Datenüberprüfung und Lösung für das vom Editor eingeführte Überprüfungsproblem. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!