ユーザのセッションにActionからアクセスしたいときはこのインタフェースを実装しなければならない。
このインタフェースはサーブレット環境の場合にのみ利用できる。
このインタフェースを使ってサーブレット環境に関係するActionを作ると、ユニットテストが難しくなるので避けるべき。
ユーザ登録画面に確認画面を作る
ユーザの登録画面で入力して登録ボタンを押すと確認画面が表示され、その後、登録ボタンを押すと登録処理が実行されるという画面遷移に変更する。
登録画面の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
UserRegActionでSessionAwareを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>