J'ai appris SSH récemment et je n'ai pas compris la différence entre $,%,% et #. J'ai fait de petits exercices et j'ai progressivement compris un peu. J'enregistrerai ce que j'ai appris.
L'entité suivante existe:
Personne de classe publique {private int id; nom de chaîne privé; public int getID () {return id; } Person public (int id, nom de chaîne) {super (); this.id = id; Name = name; } Public Person () {super (); } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (String name) {name = name; }} Dans l'action de Struts2, le code suivant est écrit:
@Override public String execute () lève une exception {// personne d'application p = new personne (1, "zhangsan"); ActionContext.getContext (). GetApplication (). Put ("Person", P); // Personne de session P1 = nouvelle personne (3, "Wangwu"); ActionContext.getContext (). GetSession (). Put ("personne", p1); // demande la personne P2 = nouvelle personne (2, "Lisi"); ActionContext.getContext (). Put ("personne", p2); // ServletContext Person P3 = nouvelle personne (5, "XiaoMing"); ActionContext.getContext (). GetContextMap (). Put ("personne", p3); Personne P4 = nouvelle personne (3, "Wangwu"); ActionContext.getContext (). GetValueStack (). Push (p4); retourner le "succès"; } Stockez un objet de personne dans l'application, la session, la demande, ServletContext, ValuEstack, respectivement. Ensuite, dans JSP, nous pouvons l'obtenir de la manière suivante:
personne: <input type = "text" name = "name" value = "$ {personne}" /> <br /> id: <input type = "text" name = "name" value = "$ {personne.id}" /> <br /> name: <input type = "text" name = "name" value = "$ {personne.name}" /> <br /> <hr> Les informations de personne obtenues par le code ci-dessus sont XiaoMing, c'est-à-dire les informations stockées dans ActionContext.getContext (). GetContextMap (). En interrogeant l'utilisation de $, il est constaté qu'il existe un moyen d'obtenir l'objet de $, c'est-à-dire,
ActionContext.getContext (). GetContextMap ()> ActionContext.getContext ()> ActionContext.getContext (). Getession ()> ActionContext.getContext (). GetApplication (). Pour les objets avec le même nom dans différentes lunettes (lunettes), la méthode de recherche de $ sera réalisée en fonction des étapes ci-dessus. S'il est trouvé, il sera sorti. S'il n'est pas trouvé, il continuera de rechercher au niveau précédent. Lorsque le haut n'existe pas, il sortira null.
Alors l'utilisation de $ est: $ {scope.object.attribute}
La valeur d'attribut de la portée est la demande, la session, l'application. Lorsqu'il n'est pas écrit par défaut, vous rechercherez selon le schéma ci-dessus. Si vous le trouvez, vous publierez la valeur d'attribut pertinente.
Dans la balise Struts, enregistrez A:
<s: propriété valeur = "# application.person" />
On peut voir que le numéro # a été utilisé pour le moment. Je pense personnellement que l'utilisation de # et $ est en fait la même. Tant que vous chargez l'objet que vous devez sortir dans une carte (ServletContext, demande, session et application) dans une plage différente, lorsque vous affichez dans la vue, en utilisant <s: propriété Value = "# scope.object.attribute"> est exactement la même que $ compréhension. Mais lorsque vous utilisez des balises de jambe de force, par exemple:
<S: TextField Name = "Person.name"> </ S: TextField>
Il peut être compris complètement comme
<input type = "text" name = "persom.name" id = "personne.name" value = "<s: propriété value =" # personne.name "/>" />
C'est-à-dire que la balise Struts a été encapsulée pour nous dans le texte HTML <S: Property Value = "# Target.name" />, ce qui peut m'économiser beaucoup de code.
De même, l'utilisation de # est: <s: propriété Value = "# scope.object.attribute" />
Bien sûr, vous pouvez utiliser les balises définies par Struts2 pour économiser les tracas de l'écriture trop de codes en double. En fait, # a d'autres utilisations, telles que la construction d'objets tels que des cartes, mais je pense personnellement que l'ère de l'écriture de code trop dans la vue s'est écoulée, et cette utilisation n'a pas de sens. De plus, cette fois, je n'ai écrit que le processus de l'affichage dans la vue, donc je n'en parlerai pas ailleurs.
Enfin, parlons de l'utilisation de%. Pour le dire simplement,% {} est une expression de calcul de chaîne. Par exemple, il existe un certain lien dans la vue, qui a généralement des fonctions de base telles que CRUD. Pour les fonctions ADD et UPDATE, il peut être terminé sur la même page. La différence est que l'adresse que nous soumettons est différente. Par exemple, cela peut être comme ceci: pour la méthode ADD, l'adresse est user_add.action, et pour la méthode UDPate, l'adresse est user_update.action, donc en forme,% peut être utilisé pour le jugement:
<s: form form = "User _% {id == 0? 'Add': 'Update'}"> </ form> Haha, donc les deux pages précédentes peuvent désormais être résolues par une page.
De même,% est utilisé plus fréquemment avec les étiquettes de jugement telles que si et ifelse dans les entretoises. Après tout, est-ce une comparaison? . . .
<s: si test = "% {false}"> <div> ne sera pas exécuté </div> </s: if> <s: elseif test = "% {true}"> <div> sera exécuté </v> </s: elsef> <s: else> <div> ne sera pas exécuté </v> </s> else> <s: Enfin, parlons de l'approche utile de ce%, en supposant qu'il existe une liste montrant toutes les notes de passage des étudiants (c'est-à-dire que les notes échouées ne seront pas affichées ci-dessus), si le% utilisé sera très simple. Non, il suffit de mettre le code en premier:
classe publique Stduent implémente java.io.serializable {private static final long SerialVersionUID = -691038814755396419l; INT PRIVÉ ID; nom de chaîne privé; Score INT privé; Sujet de chaîne privée; public int getID () {return id; } public void setid (int id) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getScore () {return score; } public void setScore (int score) {this.score = score; } public String getSubject () {return sujet; } public void setSubject (String Subject) {this.subject = sujet; } / ** * Ici, nous jugeons si le score passe l'examen * @param socre * @return * / public boolean ispast (int socre) {return getScore ()> 60; }} Alors, recherchez maintenant les notes des étudiants dans la base de données et placez-les dans la liste pour le stockage temporaire. Sur la page JSP, nous pouvons utiliser le code suivant pour contrôler si la sortie du système de qualité passe:
<s: iterator value = "# alluser"> <! - Déterminez s'il faut passer la ligne, si vous passez la ligne, elle sera sortie, sinon vous l'abandonnerez! -> <s: if test = "# session.user.ispast (score)"> name: <s: textfield name = "name"> </ s: textfield> score: <s: textfield name = "score"> </ s: textfield> / sujet: <s: textfield name = "sujet"> </ s: textfield> </ s: if> </ s: iterator>
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!