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


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

結果を表示するためのJSPページ作成

 結果を表示するためのJSPページ「KeijiWriteSuccess.jsp」ファイルを作っていこう。このファイルは、以下、List 9のようになる。

List 9■KeijiWriteSuccess.jspファイル
1: <%@ page contentType="text/html; charset=EUC_JP" %>
2: <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
3: <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
4: <%@ taglib uri="/tags/struts-html" prefix="html" %>
5: <html>
6: <body>
7: <logic:messagesNotPresent>
8: <h1>投稿完了</h1>
9: <p>投稿「<bean:write name="KeijiWriteForm" property="title" scope="request"/>」
10: を書き込みました。</p>
11: </logic:messagesNotPresent>
12: <logic:messagesPresent>
13: <h1>データベースエラー</h1>
14: <html:errors/>
15: </logic:messagesPresent>
16: <a href="index.jsp">トップに戻る</a>
17: </body>
18: </html>

 上記List 9ではLogicタグライブラリを利用してメッセージの切り分けをしている。その該当する個所が、7行目にある「messagesNotPresent」と12行目にある「messagesPresent」要素の囲みだ。

 このmessageNotPresent要素は、ActionErrorsオブジェクトやActionMessagesオブジェクトに、何らかメッセージが格納されていない場合のみに、その要素内を出力する機能を持つもの。そしてmessagePresent要素は、messageNotPresent要素とは逆に、メッセージが格納されている時にだけ、その要素内を出力する機能を持っている。まとめてみると、次の通りの意味だ。

<logic:messagesNotPresent>
ActionErrorsオブジェクトやActionMessagesオブジェクトにメッセージが格納されていない場合、ここに記述されている内容がクライアントへ出力される
</logic:messagesNotPresent>
<logic:messagesPresent>
ActionErrorsオブジェクトやActionMessagesオブジェクトにメッセージが格納されている場合、ここに記述されている内容がクライアントへ出力される
</logic:messagesPresent>

 なお、List 9はList 7に示したKeijiWriteActionからフォワードされる。KeijiWrtieActionクラスでは、エラーが発生した際にActionErrorsオブジェクトへエラーメッセージを出力している。List 9では、エラーがない場合に8〜10行目が、エラーがある場合には13〜14行目が表示されるのだ。そのエラーがない場合の処理は、8〜10行目として次のようになっている。

8: <h1>投稿完了</h1>
9: <p>投稿「<bean:write name="KeijiWriteForm" property="title" scope="request"/>」
10: を書き込みました。</p>

 ここでは、Beanタグライブラリのwrite要素を使い、「KeijiWriteForm」オブジェクトのtitleプロパティの内容を埋め込む処理をしている。この処理によって、KeijiWriteFormオブジェクトのgetTitleメソッドが呼び出され、その結果が「投稿「●●」を書き込みました。」の「●●」に相当する個所へ表示されるのだ。

 この実装は、前に挙げたList 4(KeijiWriteForm.javaファイル)で示したように、getTitleメソッドは入力フォームに入力された投稿タイトルを返すようにしている。これにより、ここでは投稿タイトルが埋め込まれるのだ。

 ちなみに、Beanタグライブラリのwrite要素を用いる際にはHTMLエンコードが不要だ。HTMLエンコードは、Beanタグライブラリのwrite要素によって自動処理される。

 write要素によってHTMLエンコードをしないよう指定する場合には、「<bean:write filter="false">」のようにfilter属性に「false」を指定すればよい。一方で、エラーがあった場合の表示は、次のようにする。

13: <h1>データベースエラー</h1>
14: <html:errors/>

 上記HTMLタグライブラリのerrors要素は、ActionErrorsオブジェクトに含まれるメッセージすべてを一覧表示する機能を持つものだ。

 一覧の表示方法は、application.propertiesファイルのerrors.header、errors.prefix、errors.stuffix、errors.footerで決まる。struts-blank.warファイルを展開した時に作られる「application.properties」ファイルの各設定は、次のようになる。

errors.header=<UL>
errors.prefix=<LI>
errors.suffix=</LI>
errors.footer=</UL>

 これにより、<html:errors/>は、クライアントに出力される際に次のよう展開される。

<UL>
<LI>1個目のエラーメッセージ</LI>
<LI>2個目のエラーメッセージ</LI>

</UL>

 実際、わざとPostgreSQLを停止したまま実行すると、Fig.6に示すメッセージから得られる。

fig06.gif

Fig.6■エラーメッセージ


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

[大澤文孝,ITmedia]