Aipoではセッションに入れた情報の取り出しなどをALEipUtilsの中で行っています。
https://github.com/aipocom/aipo/blob/master/core/src/main/java/com/aimluck/eip/util/ALEipUtils.java
セッションにセットする
public static void setTemp(RunData rundata, Context context, String key, String value) { JetspeedRunData jdata = (JetspeedRunData) rundata; VelocityPortlet portlet = ((VelocityPortlet) context.get(JetspeedResources.PATH_PORTLET_KEY)); if (portlet == null) { // Screen の場合 String js_peid = rundata.getParameters().getString(JetspeedResources.PATH_PORTLETID_KEY); jdata.getUser().setTemp( new StringBuffer().append(js_peid).append(key).toString(), value); } else { // Action の場合 jdata.getUser().setTemp( new StringBuffer().append(portlet.getID()).append(key).toString(), value); } }
セッションから取り出す
public static String getTemp(RunData rundata, Context context, String key) { JetspeedRunData jdata = (JetspeedRunData) rundata; Object obj = null; VelocityPortlet portlet = ((VelocityPortlet) context.get(JetspeedResources.PATH_PORTLET_KEY)); if (portlet == null) { // Screen の場合 String js_peid = rundata.getParameters().getString(JetspeedResources.PATH_PORTLETID_KEY); obj = jdata.getUser().getTemp( new StringBuffer().append(js_peid).append(key).toString()); } else { // Action の場合 obj = jdata.getUser().getTemp( new StringBuffer().append(portlet.getID()).append(key).toString()); } return (obj == null) ? null : obj.toString(); }
セッションから削除する
public static void removeTemp(RunData rundata, Context context, String key) { JetspeedRunData jdata = (JetspeedRunData) rundata; VelocityPortlet portlet = ((VelocityPortlet) context.get(JetspeedResources.PATH_PORTLET_KEY)); if (portlet == null) { // Screen の場合 String js_peid = rundata.getParameters().getString(JetspeedResources.PATH_PORTLETID_KEY); jdata.getUser().removeTemp( new StringBuffer().append(js_peid).append(key).toString()); } else { // Action の場合 jdata.getUser().removeTemp( new StringBuffer().append(portlet.getID()).append(key).toString()); } }
Aipoでは各ポートレットで似たような構成になっており、セッションのキーがポートレットをまたいで他の機能に影響を与えてしまわないようなつくりになっています。
例えば
ALEipUtils.setTemp(rundata, context, "key", "hoge");
などのようにした場合、セッションのキーはクラス名が勝手に接頭詞として付けられるようになっています。BlogSelectDataとかで呼び出した場合は
com.aimluck.eip.blog.BlogSelectDatakey
とかのキーになるので、他の機能に影響を与えません。また、キーにはポートレットIDも付与されるため、同じ機能を複数配置している場合でも影響を与えないようになっています。
逆に言えばちょっと別のクラスのセッションの値を使いたい場合には
ALEipUtils.getTemp(rundata, context, "key");
で呼べなくなるため、
ALEipUtils.getTemp(rundata, context, new StringBuffer() .append(BlogSelectData.class.getName()) .append("key") .toString());
などのようにして、クラス名を指定して呼ぶことになるかと思います。