月の変更処理

広告

前回のプログラムで、本日の日付を取得し、その日付に基づいたカレンダーを表示するようにしました。ここでは現在表示されている状態から違う月を表示するように変更してみます。

変更箇所としては、日付の指定を行わずにサーブレットを呼び出した場合は現在の日付を元にカレンダーを表示し、パラメータとして日付の指定があった場合にはその日付を元にカレンダーを表示するようにします。

具体的にはカレンダーの画面上に前月と翌月へのリンクを作成します。そしてパラメータとして年及び月の値を付与したサーブレットを呼び出すようにします。例えば現在の日付が2006年11月だった場合には次のようなリンクをサーブレット内で表示します。

<a href="/schedule/MonthView?YEAR=2006&MONTH=10">前月</a>
<a href="/schedule/MonthView?YEAR=2006&MONTH=12">翌月</a>

そしてMonthViewサーブレットが呼び出された時点でパラメータの有無を調べ、パラメータが指定されていればその日付を、指定されていなければ今日の日付を取得して表示するようにします。

int year;
int month;
int day = 1;

String param = req.getParameter("YEAR");
if (param == null || param.length() == 0){
  year = -999;
}else{
  try{
    year = Integer.parseInt(param);
  }catch (NumberFormatException e){
    year = -999;
  }
}

param = req.getParameter("MONTH");
if (param == null || param.length() == 0){
  month = -999;
}else{
  try{
    month = Integer.parseInt(param);
  }catch (NumberFormatException e){
    month = -999;
  }
}

/* パラメータが指定されていない場合は本日の日付を設定 */
if (year == -999 || month == -999){
  Calendar calendar = Calendar.getInstance();
  year = calendar.get(Calendar.YEAR);
  month = calendar.get(Calendar.MONTH);
  day = calendar.get(Calendar.DATE);
}

それではパラメータの取得部分をサーブレットに追加してみます。また前月と翌月へのリンクも作成します。

MonthView3.java [HTMLで表示]

コンパイルして作成されたクラスファイルを「(root)¥WEB-INF¥classes¥」ディレクトリに配置します。

D:¥servlet-sample
   |
   +--schedule
       |
       +-- (top.html)
       |
       +-- WEB-INF
       |    |
       |    +-- classes
       |          |
       |          +-- (MonthView3.class)
       |
       +-- img

また作成したサーブレットを呼び出せるように「web.xml」を次のように書き換えます。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>MonthView</servlet-name>
    <servlet-class>MonthView3</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>MonthView</servlet-name>
    <url-pattern>/MonthView</url-pattern>
  </servlet-mapping>
</web-app>

今回は直接サーブレットを呼び出します。ブラウザで「http://localhost:8080/schedule/MonthView」へアクセスします。次のように表示されます。

スケジュール管理

左上の日付の箇所に「前月」と「翌月」のリンクが増えています。では「前月」をクリックしてください。

スケジュール管理

少し見にくいですが、カレンダーが2006年10月について表示しています。月変更と同時に「前月」と「翌月」のリンクも変更していますので、続けて月を変更することが出来ます。

( Written by Tatsuo Ikura )