Arbeiten mit Struts 2-Aktionen
In Struts 2 verbringst du den größten Teil deiner Zeit mit Aktionen. Die Aktionsklasse enthält Geschäftslogik, ruft das Ressourcenpaket ab, speichert die Daten, validiert und wählt die Ansichtsergebnisseite aus, die an den Benutzer zurückgesendet werden soll. Es ist das Herz der Struts 2, daher muss man das Grundkonzept der Aktionen verstehen.
1. Aktion
Struts 2-Aktionen zwingen Sie nicht zur Implementierung einer Schnittstelle oder zur Erweiterung der Klasse. Sie müssen lediglich eineexecute()-Methode implementieren, die eine Zeichenfolge zurückgibt, um anzugeben, welche Ergebnisseite zurückgegeben werden soll.
package com.example.user.action; public class LoginAction{ //business logic public String execute() { return "success"; } }
Konfigurieren Sie instruts.xml die Aktionsklasse mitaction tag undclass attribute. Definieren Sie, welche Ergebnisseite mitresult tag an den Benutzer zurückgegeben werden soll, und geben Sie den Namen der Aktion an, mit der Sie mitname attribute auf diese Aktionsklasse zugreifen können.
pages/welcome.jsp
Jetzt können Sie über das Suffix .action auf die Aktion zugreifen.
http://localhost:8080/Struts2Example/User/validateUser.action
Die Standardaktion ist konfigurierbar. Ändern Sie einfach die Option "http://www.example.com/struts2/how-to-remove-the-action-suffix-extension-in-struts-2/[struts.action.extension]. Wert für Ihre Bedürfnisse.
2. Optionale Aktionsschnittstelle
Struts 2 wird mit einer optionalen Aktionsschnittstelle (com.opensymphony.xwork2.Action) geliefert. Durch die Implementierung dieser Schnittstelle ergeben sich einige praktische Vorteile, siehe Quellcode:
package com.opensymphony.xwork2; public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; }
Diese Schnittstelle ist sehr einfach und enthält 5 häufig verwendete konstante Werte:success, error, none, input and logic. Jetzt kann die Aktionsklasse den konstanten Wert direkt verwenden.
package com.example.user.action; import com.opensymphony.xwork2.Action; public class LoginAction{ //business logic public String execute() { return SUCCESS; } }
Ich verstehe nicht, warum viele Struts-Entwickler diese Aktionsoberfläche gerne implementieren, es ist besser, den ActionSupport zu erweitern.
3. ActionSupport
Support-Klasse, eine gängige Praxis, um Standardimplementierungen von Schnittstellen bereitzustellen.
Der ActionSupport (com.opensymphony.xwork2.ActionSupport), eine sehr leistungsstarke und praktische Klasse, die die Standardimplementierung einiger wichtiger Schnittstellen bietet:
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable { ... }
Mit der KlasseActionSupportkönnen Sie Folgendes tun:
1. Validation - Deklariert eine validate () -Methode und fügt den Validierungscode ein.
2. Text localization - Verwenden Sie die GetText () -Methode, um die Nachricht aus dem Ressourcenpaket abzurufen.
package com.example.user.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //business logic public String execute() { return "SUCCESS"; } //simple validation public void validate(){ if("".equals(getUsername())){ addFieldError("username", getText("username.required")); } if("".equals(getPassword())){ addFieldError("password", getText("password.required")); } } }
In den meisten Fällen sollten Sie diese Klasse für die praktischen Funktionen erweitern, es sei denn, Sie haben Grund, dies nicht zu tun. Dies ist auch eine sehr gute Lernklasse, um zu verstehen, wie einige der wichtigen Struts 2-Schnittstellen implementiert werden.
4. Aktionsanmerkung
Struts 2 bietet sehr gute Unterstützung für Anmerkungen. Sie können die XML-Datei entfernen und durch@action in Ihrer Aktionsklasse ersetzen.
package com.example.user.action; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.ResultPath; import com.opensymphony.xwork2.ActionSupport; @Namespace("/User") @ResultPath(value="/") public class ValidateUserAction extends ActionSupport{ @Action(value="Welcome", results={ @Result(name="success",location="pages/welcome_user.jsp") }) public String execute() { return SUCCESS; } }
Wenn Sie mehr über die Annotation Struts 2 erfahren möchten, laden Sie dieseStruts 2 annotation example zum Üben herunter.
Fazit
Kein Problem, erweitert nur die KlasseActionSupport, es passt in den meisten Fällen.