tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン作成 XWork/WebWork2でセッションを使う

Actionクラスの中でHTTPセッションを使いたい場合。PHPで言えば、$_SESSION
Confluenceはログイン基本なので、Actionクラスの中ではデフォルトでセッションが始まっている。COOKIE名がJSESSIONIDというやつ。これは匿名ユーザーにももちろん張られている。

なので、使うのは簡単。2つ方法がある。
どちらを使っても同じ。

  1. implements SessionAware する方法
  2. ServletActionContext.getContext().getSession() でSessionを取り出す方法

参考記事:[ 2816 ] [Struts2]セッションの操作 ::: Serendipity 2 future lies'n sundome. (´・ω・)

implements SessionAware する方法

import com.opensymphony.webwork.interceptor.SessionAware;
...
public class HogeAction extends ConfluenceActionSupport  implements PageAware, SessionAware
{
    private Map session;
    
    @Override
    public void setSession(Map map) {
        this.session = map;
    }
}

これで、あとはセッションを使いたい箇所で、

foo = session.get("foo");
Date d = new Date();
Object put;
put = session.put("foo", d);

とかすればOK

ServletActionContext.getContext().getSession() でSessionを取り出す方法

これは、毎回セッションを使うたびに

Map session;
session = ServletActionContext.getContext().getSession();

とやる。

どっちが楽かというと頻繁に使うなら前者で一回だけなら後者かな?
ただ、前者で統一したほうが分かりやすいと思う。