MAP | PageMixer ドキュメント > チュートリアル > Struts 環境における利用 > エラー情報の取り扱い | << | >> |
本節では、
表題に "エラー" という言い回しを含んではいますが、
"ActionMessages
" により保持される
Struts のメッセージ情報の取り扱い方法を説明します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
Notation | Full name |
---|---|
ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
Filter | jp.ne.dti.lares.foozy.pagemixer.mixer.Filter |
HTMLSymbolSet | jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet |
HashMapConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.HashMapConsumerContext |
MessagesInsetFilter | jp.ne.dti.lares.foozy.pagemixer.struts.MessagesInsetFilter |
SequenceWatcher | jp.ne.dti.lares.foozy.pagemixer.mixer.SequenceWatcher |
StrutsConsumerContext | jp.ne.dti.lares.foozy.pagemixer.struts.StrutsConsumerContext |
Notation | Full name |
---|---|
Bootstrap | pagemixer.filter.Bootstrap |
DummySetup | pagemixer.filter.DummySetup |
本節では、 HTML ソース例が PageMixer/Struts 連携におけるメッセージ取り扱いフィルタクラスの習得を助けると思われますので、 フィルタクラスに関する生成の説明の前に、 HTML ページ生成に関して説明します。
Struts 用 JSP におけるエラー埋め込みタグの例を以下に示します。
<html:errors/>
PageMixer フレームワークを利用する場合、 以下に示すような HTML ページを生成する必要があります。
<!-- 「messages」ブロックの開始 --> <span class="Struts-errors"> <!-- 「header」ブロックの開始 --> <h3><font color="red">Validation Error</font></h3> <p>以下のエラーを解消してください:</p> <ul> <!-- 「header」ブロックの終了 --> <!-- 「iteration」ブロックの開始 --> <li class="Struts-error-iterate"> <!-- 「message」ブロックの開始 --> <span class="Struts-error"> リソースバンドルから得たエラーメッセージが此処に配置されます </span> <!-- 「message」ブロックの終了 --> </li> <!-- 「iteration」ブロックの終了 --> <!-- 「footer」ブロックの開始 --> </ul> <hr> <!-- 「footer」ブロックの終了 --> </span> <!-- 「messages」ブロックの終了 -->
上記 HTML 例における"ブロック"群に関する説明は以下の通りです。
このブロックは、
メッセージ埋め込みの対象となる部分シーケンスです。
(この例ではエラーのための)ActionMessages
が見つからないか、あるいは空だった場合、
このブロック全体が刈り込まれます。
このブロックは、上記例のように、 "「iteration」ブロック" および "「message」ブロック" を含んでいる必要があります。
"「messages」ブロック" の開始と "「iteration」ブロック" の開始の間を、 このブロックとみなすことが出来ます。
このブロックは、
"html:messages"(あるいは "html:errors")TagLib において、
"header
" 属性値
(あるいは "errors.header
" )をキーとして
ResourceBundle
から取得された値に相当しますので、
空でも構いません。
このブロックは、
対象となる "ActionMessages
" により格納されている
"ActionMessage
" ごとに繰り返されます。
このブロックは、 "「message」ブロック" を含んでいる (あるいは、それと一致している)必要があります。
このブロック全体が
"「iteration」ブロック" 反復ごとの
"MessageResources
"
から得られたメッセージ文により置き換えられます。
"「iteration」ブロック" と本ブロックの違いは、
"html:errors" TagLib において
"errors.prefix
"/"errors.suffix
"
をキーとして ResourceBundle
から得られる値に相当します。
"「iteration」ブロック" の終了と "「messages」ブロック" の終了の間を、 このブロックとみなすことが出来ます。
このブロックは、
"html:messages"(あるいは "html:errors")TagLib において、
"footer
" 属性値
(あるいは "errors.footer
" )をキーとして
ResourceBundle
から取得された値に相当しますので、
空でも構いません。
一見すると、 必要とする HTML ソースが Struts TagLib と比較して複雑に思えるかもしれません。 しかし、この HTML ソースが、 Web アプリケーションを Servlet コンテナで実行することなく、 HTML ソースの描画結果を検証することを可能にします。
PageMixer は
HTML ページにメッセージを埋め込むために、
"MessagesInsetFilter
" を提供しています。
Servlet 要求の Global.ERROR_KEY
属性として格納されている
Struts のエラー情報のための
MessagesInsetFilter
生成例を以下に示します。
// "「messages」ブロック" 検知用 SequenceWatcher messagesWatcher = new SequenceWatcher.Attr(SET.CLASS, "Struts-errors"); // "「iteration」ブロック" 検知用 SequenceWatcher iterationWatcher = new SequenceWatcher.Attr(SET.CLASS, "Struts-error-iterate"); // "「message」ブロック" 検知用 SequenceWatcher messageWatcher = new SequenceWatcher.Attr(SET.CLASS, "Struts-error"); MessagesInsetFilter filter = MessagesInsetFilter.forError(messagesWatcher, iterationWatcher, messageWatcher);
MessagesInsetFilter
の
forMessage()
メソッドにより、
Servlet 要求の Global.MESSAGE_KEY
属性として格納されている
Struts のメッセージ情報のための
MessagesInsetFilter
も生成することが出来ます。
これ以外の
メッセージ情報埋め込みに関する
MessagesInsetFilter
の特徴
(例: ActionMessages
の "property" の指定)は、
API ドキュメントを参照してください。
前述のように、
セーブされた ActionErrors
に格納される
ActionError
は
ErrorKey
で識別されます。
StrutsConsumerContext
を用いる場合、
特に明示的な準備をせずとも
ErrorKey
は正しく機能します。
しかし、
"HashMapConsumerContext
" や他の
ConsumerContext
実装を用いる場合、
対応する ActionError
を明示的に格納する必要があります。
"DummySetup
" クラスは、
指定された ConsumerContext
への
ActionError
の格納を助けます。
DummySetup
クラスの
"setup(ConsumerContext context,
String[] args, int offset)
" メソッドは、
(1)"args.length <= offset
" あるいは
(2)"args[offset]
" が "-
" で「ない」場合、
ActionError
の格納を行いません。
他の場合、
"offset
"(それ自体は含まず)から
"args.length
" あるいは
配列要素が "-
" 文字列を持つ添え字(それ自体は含まず)まで、
"args
" の要素値をエラーキーとして作成した
ActionError
を格納します。
以上で必要なものが全て揃いました。 実行コードは以下のようになります。
Bootstrap bootstrap = new Bootstrap.Default(args[0]){ protected void prepare(ConsumerContext context) { DummySetup.setup(context, args, 1); } }; MessagesInsetFilter filter = MessagesInsetFilter.forError(messagesWatcher, iterateWatcher, messageWatcher); bootstrap.execute(filter);
コマンドラインは以下のようになります。
% java ClassName InputFile \ - error.fromAddress.format - OtherParameter ...
上記のコマンドラインは、
HTML ページにおけるエラー情報部位において、
"error.fromAddress.format
"
に関するエラーメッセージのみを表示します。
"-
" で挟まれた引数を省略することで、
個別のエラーメッセージだけでなく、
HTML ページにおけるエラー情報部位全体を刈り込むことも出来ます。
MAP | PageMixer ドキュメント > チュートリアル > Struts 環境における利用 > エラー情報の刈り込み | << | >> |