Strutsリファレンス(逆引き)

Strutsリファレンス
 
Web struts.wasureppoi.com
画面遷移を制御する(TransactionToken)
スポンサード リンク

画面系の開発では、正しい画面遷移が行われないと業務上問題が発生することが多々あると思いますが、Strutsでは、TransactionTokenを使用することによって、画面遷移が正しく行われていることをチェックすることができます。

TransactionTokenを使用する場合の処理の流れは以下のようになります。
  (1) 遷移元のアクションクラスでトークンを生成します。
     生成したトークンは、セッション内にトークンを保存し、かつ、遷移元画面にhiddenタグで同じトークンを
      設定します。

  (2) 遷移先のアクションクラスでトークンを比較します。
     遷移元画面のhiddenタグをリクエストパラメータとして、受け取った遷移先のアクションクラスが、
      セッションに保存しているトークンと比較して異なる場合は画面遷移の不正でエラーとなります。


例)画面は、入力画面、入力確認画面、登録完了画面の3画面あります。
  画面遷移は、必ず、入力画面 → 入力確認画面 → 登録完了画面 の順番に遷移します。
  この遷移と異なる画面遷移をした場合は 、エラーとしてエラー画面へ遷移します。


入力画面のActionクラス(TokenInputAction)

package sample.ac;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class TokenInputAction extends Action {

   public ActionForward execute(ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response) {

    // 入力画面のトークンを生成する。
    saveToken(request);

    return mapping.findForward("success");
  }
}


入力画面のトークンを作成します。


スポンサード リンク


入力確認画面のActionクラス(TokenCheckAction)

package sample.ac;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class TokenCheckAction extends Action {

   public ActionForward execute(ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response) {

     // 入力画面のトークンと比較する。
    if( !isTokenValid(request,true) ) {
      // 入力画面のトークンと異なる場合は画面遷移不正でエラー
      return mapping.findForward("error");
    }

    // 入力確認画面のトークンを生成する。
    saveToken(request);

    return mapping.findForward("success");
  }
}


入力画面のトークンと比較をします。異なる場合はエラーとなります。
正しい場合は、入力確認画面のトークンを作成します。


登録完了画面のActionクラス(TokenOutputAction)

package sample.ac;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class TokenOutputAction extends Action {

   public ActionForward execute(ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response) {

     // 入力確認画面のトークンと比較する。
     if( !isTokenValid(request,true) ) {
       // 入力確認画面のトークンと異なる場合は画面遷移不正でエラー
       return mapping.findForward("error");
     }

     // 入力フォームを取得
     DynaActionForm inform = (DynaActionForm)form;

     // ユーザーIDチェック
     String data = (String)inform.get("stringData");

     System.out.println("画面入力データ:" + data);

     // トークンを削除する
     resetToken(request);

     return mapping.findForward("success");
  }
}

入力確認画面のトークンと比較をします。異なる場合はエラーとなります。
正しい場合は、処理の最後に、入力確認画面のトークンを削除しています。

スポンサード リンク

アクションの種類
アクション(Action)
フォーム内の複数のボタンからsubmitする(DispatchAction)
フォーム内の複数のボタンからsubmitする(LookupDispatchAction)
複数のメソッドを1つのアクションクラスにまとめる(MappingDispatchAction)
既存のサーブレットをStrutsに組み込む(IncludeAction)
リクエストを転送する(ForwardAction)
リクエストを転送する(Forward属性)
アクションをチェーンさせる
異なるモジュールのアクションを呼び出す(SwitchAction)
デフォルトアクションを定義する(unknown属性)
画面遷移を制御する(TransactionToken)
指定したパラメータをアクションに渡す(parameter)
動的なリクエストパラメータを指定してリダイレクトする(RedirectingActionForward)
共通の遷移先を定義する(global-forward)
SSLで通信する(org.apache.struts.action.SecurePlugIn)
エラーメッセージを保存する(saveErrors())
メッセージを保存する(saveMessages())
ユーザー作成オブジェクトをJSPに受け渡す(request)
アクション間でユーザー作成オブジェクトを受け渡す(session)

アクションへ
忘れっぽいエンジニアのJakarta Strutsリファレンス TOPへ