目次へ

5.2. エラーメッセージの表示

検証を行い、エラーメッセージのキーをActionErrorsに登録しても肝心のエラーメッセージは表示されません。エラーメッセージの表示には、HTMLタグライブラリのerrorsタグを使用します。errorsタグは、Struts設定ファイルのaction要素のinput属性で指定されたJSPページで使用します。

...
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
...
以下のフォームにデータを入力してください。<br>
<html:errors>
<form action="...">
...

HTMLタグライブラリを使用する設定は、messageタグの場合と同じです。errorsタグはvalidateメソッドからActionErrorsオブジェクトが返された場合、その内容を検索して表示します。ただエラーメッセージをそのまま表示するため、メッセージリソースに登録する内容を工夫をしない限りは、見苦しい表示となってしまいます。例えば全てのメッセージの最後に<br>タグをつけるなどの工夫をしなければ、綺麗な表示となりません。そこで以下の特殊なキーが登録されている場合には、それらを使用して表示を行います。

errors.header errorsタグの先頭に埋め込むメッセージ(HTMLタグ)を指定します。<ul>などを想定しています。
errors.footer errorsタグの最後に埋め込むメッセージ(HTMLタグ)を指定します。</ul>などを想定しています。
errors.prefix 各エラーメッセージの先頭に埋め込むメッセージ(HTMLタグ)を指定します。<li>などを想定しています。
errors.suffix 各エラーメッセージの最後に埋め込むメッセージ(HTMLタグ)を指定します。</li>や<br>などを想定しています。

例えば以下のようなメッセージリソース(native2asciiでUnicodeエンコードされると考えてください)で、「invalid.name」「invalid.maker」の2つがエラーメッセージのキーとして指定された場合、

errors.header=<font color="red">
errors.footer=</font>
errors.suffix=<br>
invalid.name=製品名は必ず入力するようにして下さい。
invalid.maker=メーカ名は必ず入力するようにして下さい。
...

以下のようなHTMLがerrorsタグによって表示されます(実際には、改行は含まれません)。

...
<font color="red">
製品名は必ず入力するようにして下さい。<br> メーカ名は必ず入力するようにして下さい。<br> </font> ...

しかしこれまでの方法では、全てのエラーメッセージが一箇所に表示されてしまいます。あるエラーメッセージはとある箇所、別のメッセージは別の箇所にしたい事が考えられます。その場合には、errorsタグにproperty属性を指定します。

...
<html:errors property="name" />
...

property属性が指定されると、ActionErrorsのaddメソッドを使う際に指定した第1引数と同じものだけが、表示されるようになります。上の例の場合には、「製品名は必ず入力するようにして下さい」というエラーメッセージが表示されるようになります。

(実習課題2)

実習課題1のWebアプリケーションを改良しなさい。

  • エラーメッセージを表示するようにする事。
  • 異なる入力フォームに関するエラーメッセージは、別々の箇所に表示されるようにする事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp