実アプリケーションに必要な機能の実装

これまでの説明では実際のアプリケーションを作成するうえで必要になる、下記のような大切な機能が説明されていません。

  • JSPページの作成方法
  • HTML入力フォームの値をアクションクラスで参照する方法
  • 1つのフォームに複数のボタンを配置する方法
  • アクションの実行結果によって次の処理を変える方法
  • アクションで生成した動的な値をJSPで参照する方法
  • アクションで生成した動的な値をchainしたアクションで参照する方法
  • 各種メッセージを外部ファイルで管理する方法
  • 入力フォームの値を検証する方法
  • 日本語化

以降では、これら機能の実装方法を1つずつ紹介していきましょう。

JSPページの作成方法

前述したようにStruts 2は、標準ではJSPによってHTTPレスポンスのページを生成するようになっています。先ほど紹介したJSPは、その記述をご覧になればおわかりのように、動的な情報の表示も入力フォームもなく、とてもJSPと呼べるような内容ではありません。ここでは、まず入力フォームの作成方法を紹介します。Struts 2のJSPも多くの他のWebアプリケーションフレームワークと同様に、独自のカスタムタグを利用してHTMLタグを生成するように記述します(以下参照)。

リスト6: 入力フォームを追加したTop.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="Windows-31J" %>
<%@ taglib uri="/struts-tags" prefix="s" %>

<html>
<head>
    <title>こんにちは</title>
</head>

<body>
<h2>はじめましてStruts2です</h2>

<s:form theme="simple">
   ユーザ名:<s:textfield key="username" /><br>
   パスワード:<s:password  key="password" />
 <p>
   <s:submit value="Login"        action="Top_login" />
   <s:submit value="GuestLogin"   action="Top_guestLogin"/>
 </p>
</s:form>

</body>
</html>

前述したJSPに<s:form>、<s:textfield>、<s:password>、<s:submit>の各カスタムタグを追記しています。各タグはその名前からもわかるように、<form>、<input type="text">、<input type="password">、<input type="submit">の各HTMLタグを生成します。これらStruts 2のカスタムタグを利用するために、JSPにtaglibディレクティブを<%@ taglib uri="/struts-tags" prefix="s" %>として定義するのを忘れないでください。

<s:form>タグは<form>タグを生成するカスタムタグですが、<form>タグを生成する際に必要になるはずの、サブミット先のパス(HTML<form>タグのaction属性)が指定されていません。これは、Struts 2では、サブミットボタン毎に実行するアクションを指定する事ができるためです。上記の例では2つの<s:submit>タグのaction属性にて、それぞれTop_loginとTop_guestLoginというアクションを指定しています。これらアクションの定義方法は後ほど紹介しますが、1つのフォーム内に異なるアクションを呼び出すサブミットボタンを簡単に定義できる事がおわかり頂けるでしょうか。フォームに対してデフォルトのサブミット先アクションを指定する事も可能ですが、今回は省略します。入力フィールドは、<s:textfield>タグと<s:password>タグを用いて定義します。それぞれのタグのkey属性には、各フィールドの名前を指定します。この名前(フィールド名)は後述のフォームの値を参照する際に必要となるものです。

最後に、Struts 2はフォーム内のフィールドやボタンのレイアウトを自動的に行う機能を提供しています。この機能はレイアウトテンプレートを指定することで、様々な制御が可能ですが、今回はJSPの記述のままのレイアウトを生成するよう、<s:form>タグのtheme属性に"simple"を指定しています。

このJSPを実行すると、画面2のようなページが生成され、入力フィールドが表示されるようになります。

画面2: 入力フォーム

続いて、このフォームの値を参照するアクションを作成する方法を紹介します。