Struts2.0.9でSessionにアクセスする

感想おまちしてます!

ユーザのセッションにActionからアクセスしたいときはこのインタフェースを実装しなければならない。

このインタフェースはサーブレット環境の場合にのみ利用できる。

このインタフェースを使ってサーブレット環境に関係するActionを作ると、ユニットテストが難しくなるので避けるべき。

SessionAware Javadoc

スポンサーリンク

ユーザ登録画面に確認画面を作る

ユーザの登録画面で入力して登録ボタンを押すと確認画面が表示され、その後、登録ボタンを押すと登録処理が実行されるという画面遷移に変更する。

登録画面のJSP 

actionがuserconfirmに変わっただけ。

 <s:form action="userconfirm" method="post">
<s:textfield label="userName" name="userName" />
<s:password label="password" name="password" />
<s:submit value="登録" />
</s:form>

確認画面へのAction

UserRegActionSessionAwareをimplementsしてセッションMapを用意する。

private Map sessionMap;

public void setSession(Map session) {
this.sessionMap = session;
}

さらに、confirmメソッドを追加。ここでは入力されたデータをセッションに移し変えている。

   public String confirm() throws Exception {

AppLogger.debug("confirm画面へ");

this.sessionMap.put("USERNAME", this.userName);
this.sessionMap.put("PASSWORD", this.password);

return SUCCESS;
}

確認画面のJSP

セッションに入ったデータを表示するだけ。

 <s:property value="#session.USERNAME"/><br />
<s:property value="#session.PASSWORD"/>

<s:form action="userreg" method="post">
<s:submit value="登録" />
</s:form>

登録Action

登録処理は変わらず。入力値はセッションの値を使う。@SkipValidationを指定しないと、Validatorが走ってしまうので注意。

   @SkipValidation
public String execute() throws Exception {

//パラメタからVOを作成する
UserVO userVO = createUserVO();

AppLogger.debug(userVO.getUserName());
AppLogger.debug(userVO.getPassword());

//ユーザ登録処理
//とりあえずなんもしない

return SUCCESS;
}

struts.xml

遷移先を変えただけ。

   <action name="userconfirm"
class="com.daipresents.struts209.action.UserRegAction"
method="confirm">
<exception-mapping exception="java.lang.Exception" result="other_error"/>
<result name="success">/WEB-INF/jsp/userconfirm.jsp</result>
<result name="input">/WEB-INF/jsp/userreg.jsp</result>
<result name="error">/WEB-INF/jsp/userreg.jsp</result>
<result name="runtime_error">/error.jsp</result>
</action>

<action name="userreg"
class="com.daipresents.struts209.action.UserRegAction">
<exception-mapping exception="java.lang.Exception" result="other_error"/>
<result name="success">/WEB-INF/jsp/complete.jsp</result>
<result name="input">/WEB-INF/jsp/userconfirm.jsp</result>
<result name="error">/WEB-INF/jsp/userconfirm.jsp</result>
<result name="runtime_error">/error.jsp</result>
</action>