Strutsを使う時に、どこに何があるのかなどを情報をまとめる。
前提条件として、Struts、Tiles、Validatorは動く状態になっているとする。
- Struts
- Webアプリケーションのプレゼンテーション層を得意とするフレームワーク。
- Tiles
- 画面レイアウトを設定で簡単に行えるフレームワーク。
- Validator
- エラーチェックを設定で簡単に行えるフレームワーク。
登場人物
- JSP
- 画面を表現する。
- ActionServlet
- Strutsのコントローラ。ActionやFormなどを管理する人。
- Actionクラス
- ボタンを押した時などのアクションに対応したクラス。
- Formクラス
- JSPとStrutsの間でパラメタなどの受け渡しをするクラス。
- web.xml
- Webアプリケーションの設定を記述するファイル。
- struts-config.xml
- StrutsのActionやFormの設定を記述するファイル。
- tiles-def.xml
- Strutsと連携して動作するTilesの設定ファイル。画面定義やレイアウト、配置などを設定できる。
- validation.xml
- Strutsと連携して動作するvalidationの設定ファイル。妥当性チェックの定義などを設定できる。
手順の概要
- tiles-def.xmlで画面を定義する
- 作成する画面に対応したActionクラス、Formクラスをstruts-config.xmlに記述する
- Actionクラス、Formクラスを実装する
- Strutsのタグリブ(htmlタグ)を利用してJSPを記述する
- ブラウザから動作を確認する
tiles-defs.xml
画面を定義してStrutsとTilesで使う「画面名」を定義する。
<definition name="layout" path="/WEB-INF/jsp/layout.jsp">
<put name="header" value="/WEB-INF/jsp/header.jsp" />
<put name="menu" value="/WEB-INF/jsp/menu.jsp" />
<put name="content" value="" />
<put name="footer" value="/WEB-INF/jsp/footer.jsp" />
</definition>
<definition name="login" extends="layout">
<put name="content" value="/WEB-INF/jsp/login.jsp" />
</definition>
上記例の場合、「layout」という名前の基本となる画面を定義している。さらに、「login」という名前の画面は、layoutを継承し、content部分だけ「login.jsp」に摩り替えて定義している。
//layout
headerにheader.jsp
menuにmenu.jsp
contentは定義せず
fopoterにfooter.jsp
//login
headerはlayoutと同じ
menuはlayoutと同じ
contentはTop.jsp
footerはlayoutと同じ
こうすることで、layoutで定義したレイアウトを使いまわして、似通ったレイアウトのページを定義することができる。
struts-config.xml
画面の製造で使用するActionクラスとFormクラスをまずは設定する。
例としてLogin画面を考えてみる。
ログイン画面には2つのテキストボックスと1つのログインボタンがあるものとする。この画面に対してStrutsを使って設計を行うとすると・・・
- ログインボタンはログインAcitonになりそう
- 画面からの入力は2項目なので、Formに2項目作ればよさそう
- ログインに成功したら次のページに遷移して、エラーの場合はログイン画面に戻ってエラーメッセージをだせばいいかも
では、上記3点を踏まえて、必要そうなものをstruts-config.xmlに記述してみる。まずはForm。
<form-beans>
<form-bean name="LoginForm" type="com.daipresents.LoginForm" />
</form-beans>
LoginFormというものに2つの項目(ログイン名、パスワード)をStrutsに入れてもらうようにする。続いてAction。
<action path="/LoginAction"
type="com.daipresetns.LoginAction"
name="LoginForm"
scope="request">
<description>ログイン処理のアクション</description>
<forward name="success" path="top" />
<forward name="error" path="login" />
</action>
ログインボタンが押されるとLoginActionが動作して、LoginAction内でログイン処理を行うとする。LoginAction内でLoginFormを使いたいので、LoginFormも定義しておく。scopeにはFormのスコープを定義するのだけど、これはまた別の機会に説明する。
ログイン後の処理として、成功(success)の場合はトップ画面に遷移、失敗(error)の場合はログイン画面に戻るようにforward要素で定義する。pathには上記Tilesの画面定義で定義した画面名(login、topなど)を記述する。
Actionクラス、Formクラスの実装
Struts1.3.5でログイン処理を作るをみてください。
Strutsのタグリブ(htmlタグ)を利用してJSPを記述する
<html:form action="/LoginAction">
<html:text name="LoginForm" property="loginID" /><br />
<html:password name="LoginForm" property="password" /><br />
<html:submit property="submit" value="送信"/>
</html:form>
htmlタグを使ってすべて記述していることがわかる。こうすることによって、「処理」と「ページデザイン(レイアウト)」を分離することができる。
ブラウザから動作を確認する
ここまでくれば作業は完了。デプロイしてブラウザから確認すれば、動作確認を行うことができる。
以上の流れを繰り返し、画面の設計&製造を行う。