エンタープライズ:特集 2003/11/28 15:30:00 更新


特集:第2回 実用サンプルコードで理解する「Struts」の基礎 (3/15)

入力フォームを構成するJSPページの作成

 それでは実際に、ソースコードを作っていくことにしよう。まずは、投稿用入力フォームの個所から解説する。

 通常、入力フォームを構成するには、<FORM>、<INPUT>などのHTML要素を用いるが、Strutsを使う場合にはHTML要素は使わず、Strutsで用意されるHTMLタグライブラリを用いる。HTMLタグライブラリを用いると、StrutsのActionServletが呼び出す入力フォームが構成される。先に示したFig.2の投稿用フォームを構成するKeijiWrite.jspファイルは、次のList 2の通りだ。

List 2■投稿用のフォームを構成するKeijiWrite.jspファイル
1: <%@ page contentType="text/html; charset=EUC_JP" %>
2: <%@ taglib uri="/tags/struts-html" prefix="html" %>
3: <html>
4: <body>
5: <div align="center">
6: <h1>掲示板投稿</h1>
7: <html:form action="/Write">
8: <table border="1">
9: <tr>
10: <th>お名前</th>
11: <td><html:text name="KeijiWriteForm" property="username" size="40"/></td>
12: </tr>
13: <tr>
14: <th>メールアドレス</th>
15: <td><html:text name="KeijiWriteForm" property="email" size="40"/></td>
16: </tr>
17: <tr>
18: <th>タイトル</th>
19: <td><html:text name="KeijiWriteForm" property="title" size="40"/></td>
20: </tr>
21: <tr>
22: <th>本文</th>
23: <td><html:textarea name="KeijiWriteForm" property="msg" rows="10" cols="40"/></td>
24: </tr>
25: </table>
26: <html:submit value="投稿"/>
27: <html:reset value="元に戻す"/>
28: </html:form>
29: </div>
30: </body>
31: </html>

 List 2で入力フォームを定義しているのは、7行目にある次の個所である。

7: <html:form action="/Write">

 ここでは、action属性として「/Write」を指定している。この<html:form>は、クライアントに送信される際に次のform要素に置き換わる。

<form name="KeijiWriteForm" method="post" action="/[Webアプリケーションのパス名]/Write.do">

 ここでの指定により、ユーザーがSUBMITボタンを押すと、Write.doアクションが実行されるのだ。


<html:form>は、method属性を省略したときには、上記のようにpostメソッドに変換される。しかし明示的に<html:form>要素内にmethod="get"と記述すれば、呼び出しをGETメソッドに変更することもできる。

 Strutsは、<html:form>を用いた際、action属性に指定されているパスをsturts-config.xmlファイルから探し出し、必要な情報構成をする。そのため、<html:form>を用いる場合には、struts-config.xmlファイルに対して、「1. 入力フォームの内容を受け取るActionFormサブクラス」、「2. 実際の処理を行なうActionサブクラス」の2つを定義しておかなければならない。前者は「form-beans」、後者は「action-mappings」要素で設定する。

 List 2の入力フォームを使うために必要なstruts-config.xmlファイルの定義は、List 3のようになる。

List 3■struts-config.xmlファイルの抜粋
1: <!-- ======================================== Form Bean Definitions -->
2: <form-beans>
3: <form-bean name="KeijiWriteForm" type="sample.keiji.KeijiWriteForm"/>
4: 〜略〜
5: </form-beans>
6:
7: <!-- =================================== Action Mapping Definitions -->
8: <action-mappings>
9: <action path="/Write" type="sample.keiji.KeijiWriteAction"
10: name="KeijiWriteForm" scope="request" validate="false">
11: <forward name="success" path="/pages/KeijiWriteSuccess.jsp"/>
12: </action>

13: 〜略〜
14: </action-mappings>

 まずは、9〜12行目にあるaction要素を見てみよう。ここでは、action要素を使った「/Write」に関する定義が行われている。

9: <action path="/Write" type="sample.keiji.KeijiWriteAction"
10: name="KeijiWriteForm" scope="request" validate="false">
11: <forward name="success" path="/pages/KeijiWriteSuccess.jsp"/>
12: </action>

 前回説明したように、action要素は、「任意名.do」というURLが要求された時に実行するActionサブクラスを定義するためのものだ。9行目では、「type="sample.keiji.KeijiWriteAction"」と記述している。このため、ユーザーが「Write.do」を要求した場合には、sample.keiji.KeijiWriteActionクラスのexecuteメソッドが実行される。sample.keiji.KeijiWriteActionは、投稿データをデータベースに書き込む処理をするよう、すぐあとに実装する。

 11行目で指定されているforwardの要素は、sample.keiji.KeijiWriteActionが何か処理をした後、その結果を返すためのJSPページだ。このページも後に作成する。そして、10行目では、「name="KeijiWriteForm"」が指定されている。この項目は、3行目にあるform-bean要素への参照である。3行目では次のように定義している。

3: <form-bean name="KeijiWriteForm" type="sample.keiji.KeijiWriteForm"/>

 ここで指定されているsample.keiji.KeijiWriteFormが、入力フォームに入力されたデータを扱うクラスとなる。

前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ

[大澤文孝,ITmedia]