- PR -

SessionスコープにObjectを格納するキーの管理方法

1
投稿者投稿内容
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-04-11 19:41
お世話になっております。

早速質問なのですが、掲題の通りSessionスコープのキーを皆様はどの様に管理されているでしょうか?

といいますのも、格納するキーと取得するキーに微妙な差異(スペルミス等)があったりしますと、原因解明が面倒なバグに繋がる可能性があるため、JSPのコンパイル時にエラーとして検出出来る管理方法を模索しています。

今までですと、定数定義クラスを全員で共有し、そこにpublic static final Stringとしてキーを定義していました。
この方法ですと、スクリプトレットを利用して、定義した定数を参照する事により、スペルミスはコンパイルエラーとして検出出来ていました。

しかし、JSPでEL式を利用する場合ですと、定数をそのまま参照することが出来ないため頭を悩ませています。全ての定数にgetterを定義するのも非常に無駄な気がします。

どなたかスマートな解決方法をご存知でしたらご教授願いたく、宜しくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-04-11 19:59
こんなパターンはいかがですか。

コード:
interface Hoge{
    String getXXX();

    void setXXX(String xxx);
}

class HogeImpl implements Hoge{

    HttpSession session;

    HogeImpl(HttpSession session){
        this.session = session;
    }

    static final String XXX = "XXX";

    String getXXX(){
        return (String)session.getAttribute(XXX);
    }

    void setXXX(String xxx){
        session.setAttribute(XXX,xxx);
    }
}


Beanっぽくラップする方法です。
単体テストにも強いですし、スペルミスも防げますし、EL式でもいけませんか?
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-04-12 14:34
>かつのり様
ご返答ありがとうございます。
引用:
Beanっぽくラップする方法です。
単体テストにも強いですし、スペルミスも防げますし、EL式でもいけませんか?



Sessionのキーを管理するのではなく、Sessionに格納するオブジェクト自体を管理するといった感じですね。確かにこの方法でしたらキャストでコケたりする心配もありませんし、実用性が高いと感じました。

ところで、このBean自体はどの様に管理されているのでしょう?
Filterで生成して、ThreadLocalにセットするといったところでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-04-13 01:11
普通にサーブレットやStrutsならアクションクラスなどで
生成するのもありでしょうし、DIコンテナを経由するって方法もいいですね。
SUK2
ベテラン
会議室デビュー日: 2005/12/27
投稿数: 69
投稿日時: 2006-04-13 09:12
>かつのり様

勉強になりました。ご提案していただいた方法を試してみたいと思います。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)