私は最近SSHを学んでいますが、$、%、%、#の違いを理解していません。私はいくつかの小さなエクササイズをして、徐々に少し理解しました。学んだことを記録します。
次のエンティティが存在します:
パブリッククラスの人{private int id;プライベート文字列名; 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; }} Struts2のアクションでは、次のコードが記述されています。
@Override public String execute()throws Exception {//アプリケーションパーソンP = new Person(1、 "Zhangsan"); ActionContext.getContext()。getApplication()。put( "person"、p); //セッションパーソンP1 =新しい人(3、 "Wangwu"); ActionContext.getContext()。getSession()。put( "person"、p1); //人を要求しますp2 =新しい人(2、 "lisi"); ActionContext.getContext()。put( "person"、p2); // ServletContext Person P3 = new Person(5、 "Xiaoming"); ActionContext.getContext()。getContextMap()。put( "person"、p3);人P4 =新しい人(3、 "Wangwu"); ActionContext.getContext()。getValueStack()。プッシュ(P4); 「成功」を返します。 }アプリケーション、セッション、リクエスト、servletcontext、valuestackにそれぞれ個人のオブジェクトを保存します。次に、JSPで次の方法で取得できます。
人:<入力タイプ= "text" name = "name" value = "$ {person}" /> <br /> id:<input type = "text" name = "name" value = "$ {person.id}" /> <br /> name:<入力タイプ= "テキスト" name = "name" $ {person.name} "上記のコードで取得された個人情報はXiaomingです。つまり、ActionContext.getContext()。getContextMap()に保存されている情報です。 $の使用法を照会することにより、$のオブジェクトを取得する方法があることがわかります。つまり、
actionContext.getContext()。getContextMap()> actionContext.getContext()> actionContext.getContext()。getSession()> actionContext.getContext()。getApplication()。同じ名前のオブジェクトが異なるスコープ(スコープ)に存在する場合、$の検索方法は上記の手順に従って実行されます。見つかった場合、出力されます。発見されていない場合は、前のレベルで検索し続けます。上部が存在しない場合、nullを出力します。
次に、$の使用法は次のとおりです。$ {scope.object.attribute}
スコープの属性値は、リクエスト、セッション、アプリケーションです。デフォルトで書かれていない場合、上記のスキームに従って検索します。見つけた場合、関連する属性値を出力します。
Strutsタグで、保存します:
<s:Property Value = "#Application.Person"/>
この時点で#番号が使用されていたことがわかります。個人的には、#と$の使用は実際には同じだと思います。オブジェクトをロードする限り、マップ(servletcontext、request、session、application)に異なる範囲で出力する必要があります。ビューに表示するときは、<s:scope.object.attribute ">を使用して、<s:scope.object.attribute">は$理解とまったく同じです。ただし、Strutsタグを使用する場合、たとえば:
<s:textfield name = "person.name"> </s:textfield>
それは完全に理解することができます
<入力型= "text" name = "persom.name" id = "person.name" value = "<s:property value ="#person.name " />" />
つまり、Strutsタグは、HTMLテキスト<s:Property Value = "#target.name"/>にカプセル化されています。これにより、多くのコードを保存できます。
同様に、#の使用法は次のとおりです
もちろん、Struts2で定義されたタグを使用して、重複したコードを書く手間を省くことができます。実際、#にはマップなどのオブジェクトの構築など、他の用途がありますが、私は個人的には、ビューであまりにも多くのコードを書く時代が合格しており、この使用は意味がないと思います。さらに、今回はそれをビューに表示するプロセスのみを書いたので、他の場所では話しません。
最後に、%の使用について話しましょう。簡単に言えば、%{}は文字列計算式です。たとえば、ビューには特定のリンクがあり、一般にCRUDなどの基本的な機能があります。追加および更新機能の場合、同じページで完了できます。違いは、提出するアドレスが異なることです。たとえば、このようなものかもしれません。ADDメソッドの場合、アドレスはuser_add.actionであり、udpateメソッドの場合、アドレスはuser_update.actionです。
<s:form action = "user _%{id == 0? 'add': 'update'}"> </form>ハハ、したがって、前の2ページを1ページで解決できるようになりました。
同様に、%は、StrutsのIFやIfelseなどの判断ラベルでより頻繁に使用されます。結局のところ、それは比較ですか? 。 。 。
<s:test = "%{false}"> <div>は実行されません</div> </s:if> <s:elsef test = "%{true}"> <div>は実行されます</div> </s:elsef> <s:else> <div>は実行されません</div> </s:else>>>>>>>>最後に、この%の有用なアプローチについて話しましょう。使用した%が非常に簡単である場合、すべての生徒の合格グレードを示すリストがあると仮定して(つまり、上記のグレードが表示されない場合)。いいえ、コードを最初に置くだけです:
パブリッククラスstduentはjava.io.serializable {private static final long serialversionuid = -691038814755396419l; private int id;プライベート文字列名;プライベートINTスコア。プライベート文字列の件名; 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 getScore(){return score; } public void setScore(intスコア){this.score = score; } public string getSubject(){return subject; } public void setSubject(string subject){this.subject = subject; } / ** *ここで、スコアが試験に合格するかどうかを判断します * @param socre * @return * / public boolean ispast(int socre){return getScore()> 60; }}そのため、データベース内の学生の成績を調べて、一時的なストレージのためにリストに入れます。 JSPページでは、次のコードを使用して、グレードシステムの出力が合格するかどうかを制御できます。
<s:iterator value = "#alluser"> <! - ラインを渡すかどうかを決定します。ラインを渡すと出力されます。 - > <s:if test = "#session.user.ispast(score)"> name:<s:textfield name = "name"> </s:textfield> score:<s:<s: "score"> </s:textfield>/subject:<s: "> </s:textfield> </s:if> </>>> <
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!