Ich habe in letzter Zeit SSH gelernt und den Unterschied zwischen $,%,%und#nicht verstanden. Ich habe einige kleine Übungen gemacht und allmählich ein wenig verstanden. Ich werde aufzeichnen, was ich gelernt habe.
Die folgende Entität existiert:
public class Person {private int id; privater Zeichenfolge Name; public int getid () {return id; } public Person (int id, String -Name) {Super (); this.id = id; Name = Name; } public Person () {Super (); } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String name) {name = name; }} In der Aktion von Struts2 wird der folgende Code geschrieben:
@Override public String execute () löst Ausnahme aus {// Anwendungsperson p = neue Person (1, "Zhangsan"); ActionContext.getContext (). GetApplication (). Put ("Person", p); // Sitzung person p1 = neue Person (3, "Wangwu"); ActionContext.getContext (). GetSession (). Put ("Person", p1); // Person p2 = neue Person anfordern (2, "Lisi"); ActionContext.getContext (). Put ("Person", p2); // ServletContext Person p3 = neue Person (5, "Xiaoming"); ActionContext.getContext (). GetContextMap (). Put ("Person", p3); Person p4 = neue Person (3, "Wangwu"); ActionContext.getContext (). GetValUestack (). Push (p4); zurück "Erfolg"; } Speichern Sie ein Personenobjekt in Anwendung, Sitzung, Anfrage, ServletContext, EqualSeTack. Dann können wir es in JSP auf folgende Weise erhalten:
Person: <Eingabe type = "text" name = "name" value = "$ {Person}" /> <br /> id: <Eingabe type = "text" name = "name" value = "$ {person.id}" /> <br /> name: <input type = "text" name "name" name "value Die im obigen Code erhaltenen Personeninformationen sind Xiaoming, dh die in ActionContext.getContext () gespeicherten Informationen. GetContextMap (). Durch die Abfrage der Verwendung von $ wird festgestellt, dass es eine Möglichkeit gibt, das Objekt von $ zu erhalten, das heißt,
ActionContext.getContext (). GetContextMap ()> actioncontext.getContext ()> actionContext.getContext (). GetSession ()> actionContext.getContext (). GetApplication (). Für Objekte mit demselben Namen gibt es in verschiedenen Scopes (Scopes) die Suchmethode von $ gemäß den oben genannten Schritten. Wenn es gefunden wird, wird es ausgegeben. Wenn es nicht gefunden wird, wird es weiterhin auf der vorherigen Ebene suchen. Wenn die Oberseite nicht existiert, gibt es NULL aus.
Dann ist die Verwendung von $: $ {scope.object.attribute}
Der Attributwert des Umfangs ist Anfrage, Sitzung, Anwendung. Wenn Sie standardmäßig nicht geschrieben sind, suchen Sie nach dem obigen Schema. Wenn Sie es finden, geben Sie den entsprechenden Attributwert aus.
Speichern Sie im Streben -Tag A:
<S: Eigenschaft value = "#application.person"/>
Es ist ersichtlich, dass die # Nummer zu diesem Zeitpunkt verwendet wurde. Ich persönlich denke, dass die Verwendung von # und $ tatsächlich derselbe ist. Solange Sie das Objekt laden, müssen Sie bei der Anzeige in der Ansicht in einer Karte (ServletContext, Anfrage, Sitzung und Anwendung) in einem anderen Bereich ausgeben, und unter Verwendung von <s: Eigenschaftswert = "#scope.object.attribute"> ist genau das gleiche wie $ Verständnis. Aber wenn Sie beispielsweise Streben -Tags verwenden:
<s: textfield name = "person.name"> </s: textField>
Es kann vollständig verstanden werden als
<Eingabe type = "text" name = "persom.name" id = "person.name" value = "<s: Eigenschaft value ="#Person.name " />" />
Das heißt, das Struts -Tag wurde für uns im HTML -Text <S: Eigenschaftswert = "#target.name"/> eingekapselt, wodurch mir viel Code sparen kann.
In ähnlicher Weise lautet die Verwendung von #: <s: Eigenschaft value = " # scope.object.attribute" />
Natürlich können Sie die von Struts2 definierten Tags verwenden, um den Aufwand zu speichern, zu viele doppelte Codes zu schreiben. Tatsächlich hat # andere Verwendungen, wie z. B. das Erstellen von Objekten wie Karten, aber ich persönlich denke, dass die Ära des Schreibens zu viel Code in der Ansicht vergangen ist und diese Verwendung keine Bedeutung hat. Darüber hinaus habe ich diesmal nur den Prozess geschrieben, ihn in der Ansicht anzuzeigen, sodass ich nicht anderswo darüber sprechen werde.
Lassen Sie uns schließlich über die Verwendung von %sprechen. Um einfach auszudrücken, ist %{} ein String -Berechnungsausdruck. Zum Beispiel gibt es einen bestimmten Link in der Ansicht, der im Allgemeinen grundlegende Funktionen wie CRUD aufweist. Für die Funktionen hinzufügen und aktualisieren können sie auf derselben Seite abgeschlossen werden. Der Unterschied besteht darin, dass die von uns eingereichte Adresse unterschiedlich ist. Beispielsweise kann es genau so sein: Für die Methode hinzufügen ist die Adresse user_add.Action, und für die UDPATE -Methode lautet die Adresse user_update.action, sodass in Form % für das Urteil verwendet werden kann:
<S: Form Action = "Benutzer _%{id == 0? 'Hinzufügen': 'Update'}"> </Form> Haha, also können die beiden vorherigen Seiten jetzt von einer Seite gelöst werden.
In ähnlicher Weise wird % häufiger mit den Urteilsbezeichnungen wie IF und IFelse in Streben verwendet. Ist es schließlich ein Vergleich? . . .
<s: Wenn test = "%{false}"> <div> wird nicht ausgeführt. Lassen Sie uns schließlich über den nützlichen Ansatz dieses % sprechen, vorausgesetzt, es gibt eine Liste, die alle vorübergehenden Noten der Schüler zeigt (d. H. Die fehlgeschlagenen Noten werden nicht oben angezeigt), wenn die verwendeten % sehr einfach sind. Nein, setzen Sie einfach den Code zuerst:
öffentliche Klasse Stduent implementiert java.io.serializable {private statische endgültige long serialversionuid = -691038814755396419l; private int id; privater Zeichenfolge Name; Privat int Score; privates String -Betreff; public int getid () {return id; } public void setId (int id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int getCore () {return Score; } public void setScore (int Score) {this.score = Score; } public String getUntject () {return thema; } public void setSubject (String -Subjekt) {this.subject = Subjekt; } / ** * Hier beurteilen wir, ob die Punktzahl die Prüfung abgibt }} Schauen Sie sich nun die Noten der Schüler in der Datenbank an und setzen Sie sie in die Liste, um einen temporären Speicher zu erhalten. Auf der JSP -Seite können wir den folgenden Code verwenden, um zu steuern, ob die Ausgabe des Notensystems übergeht:
<S: Iterator value = "#aluser"> <!- Bestimmen Sie, ob Sie die Linie übergeben sollen. Wenn Sie die Linie übergeben, wird sie ausgegeben, sonst geben Sie sie auf! -> <s: if test = "#session
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!