私はSessionAwareを実装している私のアプリケーションを(このポータルの一部のユーザーに感謝します)作成します。Struts2 - セッションのトラブル
これは私の実際のコードです:
public class UserManager extends ActionSupport implements SessionAware {
private Map<String, Object> session;
@Override
public String execute() throws Exception {
return SUCCESS;
}
public void setSession(Map<String, Object> map) {
this.session=map;
}
public String checkLogin() {
session.put("loggedOn", true);
return SUCCESS;
}
public String checkLogout() {
session.clear();
return SUCCESS;
}
}
と私は私の.jspファイルにこれらの変数をチェック:コードの
<s:if test="#session['loggedOn']!=true">
DIV LOGIN
</s:if>
<s:else>
DIV LOGOUT
</s:else>
簡単に作品を。
何私が知りたいことはこれです:
1 - Beanは、要求がスコープ(デフォルトとして)です。リクエストが終了すると、それは破壊されます。しかし、私はマップに変数を置くと、それがサーバー上にまだ生きているのを見ます。どのように可能ですか?私の豆の変数です。
2 - 誰がsetSessionメソッドを呼び出しますか?私はサーブレットは、そのインターフェイスを実装しているという事実のために思う?
3 - セッションオブジェクトにオブジェクト/ Beanを保存することについて切り離したいと思います。私はどのような種類のMVCフレームワークもスコープされたBeanセッションを使用したいと思います。 struts2でどうすればいいですか?
は、あなたがこれらの質問を明確にすることを願って:)乾杯
1&2 - これでOKです。セッションマップ参照は、アクションビーン 'public void setSession(Map map){this.session = map;}にセットされます。 } '。しかしWHOはこの方法を呼びますか?私はアクション(私はそのBeanと呼ぶ)をするとき、私はこの関数が呼ばれていることを知っている...どのように可能ですか?サーブレットですか? –
markzzz
いいえ、それを行うインターセプターはありません! struts.xmlには、パッケージ宣言に 'extends = "struts-default"'という文字が含まれているので、これはどういう意味ですか?あなたの行動はそれに設定されたフォームからどのように値を取得しますか?あなたのセッションは自動的にどのように呼び出されますか?値はあなたのアクションからJSPにどのように得られますか? ...それはすべてインターセプタによって行われます...重要なことを見てみる必要があります:Struts2-core-xxxjar(xxxは現在のバージョン)を開き、デフォルトのパッケージを見て、struts-default.xmlを開きます'package name = "struts-default"'、 – Quaternion
'interceptor-stack name = "defaultStack"'これはインターセプタのリストで、アクションに達するまで順番に呼び出され、それらのすべてが戻ってくる要求が処理されるまでスタックを起動します。そこから他のスタックを選択することはできませんが、一番下の 'default-interceptor-ref name = "defaultStack"'に表示されるので、このパッケージ内のこのスタックが使用されている理由です=)今度はスタックリストインターセプタは名前でも上位にあれば、定義されたすべてのインターセプタとクラス(xwork jarファイル)を見ることができますので、すぐにこれをスキップして、それぞれのクラスを – Quaternion