エンタープライズ:特集 | 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に示すメッセージから得られる。
前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ
[大澤文孝,ITmedia]