@Namespace(value="/token")
@Results({
@Result(name="start" , location="start.jsp") ,
@Result(name="first" , location="first.jsp") ,
@Result(name="second" , location="second.jsp") ,
// 入力チェックエラー時に遷移
@Result(name="invalid.token" , location="start.jsp")
})
public class TokenSampleAction extends ActionSupport {
private static Logger log = Logger.getLogger(TokenSampleAction.class);
/**
* 最初の画面。遷移チェックを行わない。
*/
@Action(value="start")
public String start() throws Exception {
log.debug("start ( no check token.)");
return "start";
}
/**
* 次に遷移するアクション。遷移チェックを行うのでtokenを利用。
*/
@Action(value="first" ,
interceptorRefs={
@InterceptorRef(value="defaultStack"),
@InterceptorRef(value="token"),
})
public String first() throws Exception {
log.debug("token checked. - first success");
return "first";
}
/**
* さらに遷移して、遷移チェックを行うアクション。
*/
@Action(value="second" ,
interceptorRefs={
@InterceptorRef(value="defaultStack"),
@InterceptorRef(value="token"),
})
public String second() throws Exception {
log.debug("token checked. - second success");
return "second";
}
private String value1;
public String getValue1() {
return value1;
}
public void setValue1(String value1) {
this.value1 = value1;
}
}
では実際に画面遷移チェックを行う画面を稼動させましょう。「http://127.0.0.1:8080/interceptors/token/start.action」をブラウザで開くと、図8の画面が開きます。

この画面にて、「1番目へ進む」ボタンを押します。テキストボックスへはなんらかの値を入れておきます。すると、図9の画面が表示されます。

続いて「次(2番目)へ進む」ボタンを押すとチェック完了画面が出力されます。ではここで遷移チェックエラーを出してみましょう。ブラウザの戻るボタンを押して、再び図8の画面を出し、先ほどと同じように「1番目へ進む」ボタンを押します。すると、正しい画面操作をしていないと判定し、TokenInterceptorは自動的に遷移エラーを送出し、Actionクラスでの設定どおり、図9の画面のようにエラーメッセージとともに最初の画面へ戻ります。

(7)Validation Interceptor
Actionに対して入力チェック(Validator)を利用できるようになります。Validatorによって入力チェックエラーを検出した場合は、入力チェックエラー専用のメッセージ領域、FieldErrorの項目に内容が出力されます。また、struts-default.xmlにて、このインターセプタを用いないメソッドがstruts-default.xml(struts2-core-2.1.x.y.jar内に含まれる)で定義されています。
- 例外メソッド:input,back,cancel,browse
(8)Workflow Interceptor
Validaton Interceptorとセットで使われます。入力チェックエラーを検知すると、Actionクラスを実行する前に処理を中断し、result値にinputを渡します。Validaton Interceptor同様、このインターセプタが適用されないメソッドがstruts-default.xmlで定義されています。
- 例外メソッド:input,back,cancel,browse
Validation InterceptorとWorkflowInterceptorの詳細については『Struts 2入門(2)~バリデーションの仕組みを理解する(前編)』と『Struts 2入門(2)~バリデーションの仕組みを理解する(後編)』を参考にしてください。
まとめ
今回はStruts 2の制御に関わるものに絞って紹介していきました。次回は残りのインターセプタの紹介と解説をします。
