SessionAwareをimplementsしてsessionへ「xxx」という値を格納するとします。
Java
1DoSomethingAction.java 2 3public class DoSomethingAction extends ActionSupport implements SessionAware { 4 private Map<String, Object> session; 5 6 public String execute() { 7 session.put("xxx", xxx); 8 return SUCCESS; 9 } 10 11 public void setSession(Map<String, Object> session) { 12 this.session = session; 13 } 14} 15
そしてJSPでsessionからxxxを引き出すときは以下のように"#"記号を付けるのが通常だと思っています。
JSP
1<s:property value="#session.xxx"/>
しかし、ActionクラスにMapのgetterを書くことで、以下のように**"#"記号なし**でもsessionから値を引っ張ってこれています。
JSP
1<s:property value="session.xxx"/>
StackOverflow上での似た質問を読んでみると、
・"#"が付く場合はActionContext内でValueStack以外のオブジェクトへアクセスする
・"#"なしの場合はActionContext内でValueStack内のオブジェクトへアクセスする
という風に書いてあったのを読んだのですが**「だから何?具体的にどう違うの?」という疑問を抱えております。**
- ValueStackの中にActionクラスのプロパティとしてのsessionマップオブジェクト
- ActionContextの中にもともとStruts2側で定義済みのsessionマップオブジェクト
この2種類(?)のsessionマップオブジェクトが同時に存在している状態らしい、ということかなと思っているのですが、一見、どちらの場合でも「正しく表示ができている」という結果に違いはないのでなおさら何が違うかが分からず。。
"#"あり、"#"なしでそれぞれ値を取り出す場合の具体的な違いをご説明いただけると非常にありがたいですm(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/01 00:01
2018/11/01 03:00