参照:https://www.knowledge-ex.jp/opendoc/Struts_1day_seminar.pdf
https://www.masatom.in/pukiwiki/Struts/Validate%25A4%25CE%25A4%25E4%25A4%25EA%25CA%25FD/
【Strutsとは】
・JavaでWebアプリケーションを開発する際に用いられるフレームワーク
・Strutsには2つの系統が存在する
・Apache Struts Action Framework
通常のStruts(Struts1.x系)
ACSはこちらに該当する(Struts1.0)
・Apache Shale Framework
Struts2.0として提案されたもの
【Strutsの基本コンポーネント】
・ActionServlet
・ActionForm
・Action
・JSP
・アクションコンフィグレーションファイル(struts-config.xml)
・web.xml
【全体の処理フロー】
①ActionServletがアクション名を含むリクエストを受け取る
②ActionServletはアクション名をstruts-config.xmlに照合し
必要なActionForm,Actionを特定する
③ActionFormは特定されたActionFormのメソッド(perform)を実行し、必要に応じて処理結果を受け取る
④ActionServletは特定されたActionメソッドを実行し、遷移先ページについての情報を受け取る
⑤ActionServletはActionの処理結果をもとに適切なJSPへ画面遷移(フォワード)する
⑥JSPが実行され、レスポンスを返す
【アクション名】
あるリクエスト処理に必要なリソースを特定するための名称
アクション名は任意に設定できるが、struts-config.xmlの定義と合致している必要がある
【ActionServletの役割】
・MVCのコントローラに相当
・struts-config.xmlに基づいてリクエストを処理する
・Strutsフレームワークの中核となるコンポーネント
・基底クラスは、org.apache.struts.action.ActionServlet
・リクエストの処理の流れをコントロールする
【ActionFormの役割】
・クライアントから送られるリクエストパラメータを自動的に保管したり、
値の妥当性をチェック(Validate)したりするコンポーネント
・基底クラスは、org.apache.struts.action.ActionForm
・この基底クラスを継承してアプリケーションに応じたサブクラスを作成して利用
→setter/getterの実装,validateメソッドなどのオーバーライド
【Actionの役割】
・主にビジネスロジックを実行して、次の遷移先を設定するコンポーネント
・基底クラスは、org.apache.struts.action.Action
・必要に応じて処理結果をスコープに格納し、遷移先情報をActionServletに返却
※スコープ:データを保持できる期間
保持できる期間ごとに4つのスコープがある
page:あるページ内でのみアクセス可能
request:リクエストを受けてからレスポンスを返すまでの間はアクセス可能
session:セッションが継続している間はアクセス可能
application:アプリケーションが継続している間はアクセス可能
【JSPの役割】
・ページ生成に用いられるコンポーネント
・Strutsでは専用taglibを使用してページを効率的に作成可能
【taglibの種類】
・Beanタグライブラリ
→JavaBeanのプロパティのデータ操作,メッセージ表示を行うライブラリ
・HTMLタグライブラリ
→フォームの作成タグなど、HTMLタグ機能をStruts専用タグで代替したライブラリ
・Logic Tagsライブラリ
→条件分岐,繰り返し,比較などの制御を行うためのライブラリ
【taglibの使用方法】
JSPファイルの先頭にtaglibディレクティブの宣言が必要
例:
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix=“bean” %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix=“html” %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix=“logic” %>
【タグライブラリの説明】
Beanタグライブラリ:
・bean:define
識別名の宣言および登録
・bean:write
値の取得および表示
・bean:message
メッセージの取得および表示
HTMLタグライブラリ:
・html:form
フォームの定義
・html:text
テキストボックスの定義
・html:submit
submitボタンの定義
・html:link
リンクの定義
・html:messages
メッセージの表示
・html:errors
エラーメッセージの表示
Logicタグライブラリ:
・logic:iterate
反復制御を行う
・logic:equal
同値の場合を正とし処理を実施
・logic:notEqual
異なる値の場合を正とし処理を実施
・logic:greaterEqual
基準値以上の場合を正とし処理を実施
・logic:greaterThan
基準値より大きい場合を正とし処理を実施
・logic:lessEqual
基準値以下の場合を正とし処理を実施
・logic:lessThan
基準値より小さい場合を正とし処理を実施
・logic:empty
指定したオブジェクトが空の場合を正とする
・logic:notEmpty
指定したオブジェクトが空ではない場合を正とする
※ACSではlogic:empty,logic:notEmptyを使用しようとするとエラーになる
(Struts1.0では存在していない?)
【アクションコンフィグレーションファイル(struts-config.xml)】
主な記載内容としては、
・共通遷移先の管理
・ActionFormの定義
・Actionの定義
・アクション名とActionForm,Actionなどのリソースの関連付け
・Actionごとの遷移先管理
・メッセージリソースファイル定義
【web.xml】
・Servletコンテナがアプリケーション動作を制御するための設定ファイル
・ActionServletに関する定義を記述する
・/WEB-INF直下に配置
※今回の課題では特に触れなくても問題なし
【画面遷移のさせ方】
基本的にJSP⇔Actionクラス,Formクラスの紐づけはstruts-config.xmlで設定する。
・nameと対応するFormクラスの定義
定義内容:
"WF_back_SWFM0206_TaskTextInformationRegisterForm"が呼び出されたときは、
"assam.acs.ebiz.action.WF.back.SWFM0206.TaskTestInformationRegisterForm"クラスを呼び出す。
下記のnameと対応させる必要がある。
・画面(JSP)と実際に紐づくActionクラスの定義
定義内容:
画面上で"/WF/back/SWFM0207/TaskTextInformationRegisterConfirm"のURLが指定された場合、
“assam.acs.ebiz.action.WF.back.SWFM0207.TaskTestInformationRegisterConfirmAction"クラスを呼び出す。
上記のActionクラスと対応するFormクラスは"WF_back_SWFM0206_TaskTestInformationRegisterForm"で呼び出されるクラス。
Formクラスのvalidate処理を行い、エラーが発生した場合は”/WF/SWFM0206.jsp"上で表示する。
Actionクラスの処理が成功した時は、forward=“SUCCESS"を返し、”/WF/SWFM0207.jsp"に遷移する。
Actionクラスの処理が失敗した時は、forward=“FAILURE"を返し、”/WF/SWFM0206.jsp"に遷移する。
【Validateのしくみ】
入力した内容はActionFormが責任を持つべきという思想から、ActionFormにValidateする統一的なI/Fを持っている。
validateメソッドによって、リクエストパラメータの妥当性がチェックされ、結果がActionServletに返される。
【validateメソッドの例】
・戻り値がActionErrors型
→ActionErrorsは、各エラーメッセージを保持するコンテナオブジェクト
・好ましくないケースをチェックし、当てはまればエラーメッセージを生成する
→new ActionMessage()でメッセージを生成し、errors(ActionErrors型)にadd()メソッドで格納
ActionMessageはメッセージをメッセージリソースファイルから取得し保持するためのオブジェクト
・戻り値としてerrorsを返却
・ActionServletがerrorsを受け取る
→①errorsが空の場合、エラーなしと判断
②ActionMessageオブジェクトが一つ以上格納されていれば、エラーありと判断
【メッセージリソースファイル】
・アプリケーションで使用されるメッセージを設定したファイル
・[キー文字列=表示用メッセージ]という形式で作成されており、
キー文字列を指定することで、表示用メッセージを取得できる
※例:MCJ-back-web/Web Content/WEB-INF/conf/WF-form-validation.error.xml
【Validate実装方法】
①まずFormBaseクラスにチェックロジックを実装し、ActionFormのvalidateメソッドをオーバーライドする。
※既存のFormBaseクラスの作りに合わせる
②struts-config.xmlで
<action path="/WF/back/SWFM0207/TaskTestInformationRegisterConfirm"
type="assam.acs.ebiz.action.WF.back.SWFM0207.TaskTestInformationRegisterConfirmAction"
name="WF_back_SWFM0206_TaskTestInformationRegisterForm" scope="request" validate="true"
input="/WF/SWFM0206.jsp">
<forward name="SUCCESS" path="/WF/SWFM0207.jsp" />
<forward name="FAILURE" path="/WF/SWFM0206.jsp" />
</action>
のようにvalidate=“true”(validate処理を実行する否かの設定),
エラー時の遷移先(input="/WF/SWFM0206.jsp")を定義する。
③遷移先のJSPでエラー文言を表示したい箇所に
<html:errors property=“input”/>を記載する。
これで、上記のvalidate処理でエラーが発生した場合、property属性の値(input)のIDエラーを
errorsインスタンスから探し、画面表示を実施する。