< 前へ | 次へ >

演習 6: アクション・マッピングの編集

アクション・マッピングは、実行されるアクションを表しています。 また、実行時には、アプリケーションのフローを決定します。

アクション・マッピングは、通常はアクション・クラスへの参照を 含む構成ファイル・エントリーです。このエントリーには、アクションが使用できる フォーム Bean への参照を含めることができます。また、このアクションのみに 表示されるローカル転送と例外を定義することもできます。 JavaServer Pages (JSP) ページのコードを作成する場合は、アクションを トリガーするアクション・マッピングを参照することができます。

アクション・クラスには、フォームが実行されたときに 呼び出される execute メソッドが含まれます。 このメソッドでは、算出された結果が「成功」(出力 JSP ページをポイントしている 転送によって定義される)、または「失敗」(入力 JSP ページをポイントしている 転送によって定義される) のどちらであるかを判別するロジックを指定することができます。

アクション・マッピングを編集するには、次のステップに従います。

  1. プロジェクト・エクスプローラーで、DayOfWeek\Java Resources: src\dayofweek.actions フォルダーにナビゲートします。
  2. ComputeDayAction.java ファイルをダブルクリックして 開きます。
  3. ファイルですべてのテキストを選択して、「Delete」 を 押して除去します。
  4. 次のコードをコピーしてファイルに貼り付けます。
    package dayofweek.actions;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    
    import com.ibm.dayofweek.DateData;
    
    /**
     * @version   1.0
     * @author
     */
    
    public class ComputeDayAction extends Action {
    
      /**
       * Constructor
       */
      public ComputeDayAction() {
    
        super();
    
      }
    
      public ActionForward execute(
        ActionMapping mapping,
        ActionForm form,
        HttpServletRequest request,
        HttpServletResponse response)
        throws Exception {
    
        ActionErrors errors = new ActionErrors();
        ActionForward forward = new ActionForward();
        // 戻り値
        DateData dateData = (DateData) form;
        int year;
        int month;
        int day;
        int dayOfWeek;
        int valcen;
        int valleap;
        int valyear;
        int valmon;
        int valday;
        int[] centuries = new int[4];
        int[] months = new int[13];
        String[] daysOfWeek = new String[7];
        centuries[0] = 2;
        centuries[1] = 0;
        centuries[2] = 5;
        centuries[3] = 3;
        months[1] = 5;
        months[2] = 1;
        months[3] = 0;
        months[4] = 3;
        months[5] = 5;
        months[6] = 1;
        months[7] = 3;
        months[8] = 6;
        months[9] = 2;
        months[10] = 4;
        months[11] = 0;
        months[12] = 2;
        daysOfWeek[0] = "Sunday";
        daysOfWeek[1] = "Monday";
        daysOfWeek[2] = "Tuesday";
        daysOfWeek[3] = "Wednesday";
        daysOfWeek[4] = "Thursday";
        daysOfWeek[5] = "Friday";
        daysOfWeek[6] = "Saturday";
    
        try {
          day = dateData.getDay();
          month = dateData.getMonth();
          year = dateData.getYear();
          if (month < 3) {
            year--; // year から 1 を減算
          }
          valcen = centuries[year / 100 % 4];
          valleap = year % 100 / 4;
          valyear = year % 100 % 7;
          valmon = months[month];
          valday = day % 7;
          dayOfWeek = valcen + valleap + valyear + valmon + valday;
          dayOfWeek = dayOfWeek % 7;
          dateData.setDayOfWeek(daysOfWeek[dayOfWeek]);
          request.setAttribute("dateData", dateData);
    
        } catch (Exception e) {
    
          // 適切な名前と ID を使用してエラーを報告します。
          errors.add("name", new ActionError("id"));
          e.printStackTrace();
        }
    
        // メッセージが必要な場合は、タグで使用するために、
        // 指定されたキーを要求に保管します。
    
        if (!errors.isEmpty()) {
          saveErrors(request, errors);
          forward = mapping.findForward("failure");
        } else {
          forward = mapping.findForward("success");
        }
    
        // 次で終了
        return (forward);
    
      }
    
    }
    ヒント: プロジェクト内のパッケージの名前は、dayofweek.actions と 異なることがあります。そのため、先行するコードの最初の行の dayofweek.actions を パッケージの名前に置き換えます。
  5. ファイルを保管して閉じます。

演習のチェックポイント

これで、アクション・クラスに、Web フォームが実行されたときに 呼び出される execute メソッドが含められました。 算出された結果が「成功」(出力 JSP ページをポイントしている転送によって 定義される)、または「失敗」(入力 JSP ページをポイントしている転送によって 定義される) のどちらであるかを判別するロジックを作成しました。

以下のタスクの実行方法を学習しました。
  • アクション・クラスに execute メソッドを追加する方法。
  • アクションの成功または失敗を判別するロジックを作成する方法。
< 前へ | 次へ >