便利なコードパーツ集!

やまろうのプログラミングTips

Java

Struts1で掲示板作る! JSPを作る。TagLibを使う。国際化対応する。

投稿日:2016年12月6日 更新日:

2003年

StrutsでJSPを作る場合にいくつかの流儀があります。
1. <form>タグはStrutsが提供する<html:form>を使う。
2. コンテンツ(テキスト)はJSPに直接書かず、リソースファイルに書く。
3. 出来る限りスクリプトレット(<% %>タグのこと)を使わず、
StrutsのTagLibを使う。

1番は、Strutsが提供するActionFormの機能を使うのに不可欠です。
<html:form>からsubmitされたフォーム値は自動的にActionFormに格納され、
さらには、エラー画面等から戻ってきた場合に、以前入力した内容を自動的に
復活させます。もちろん<html:form>を使わずに普通にHTMLの<form>を使うこと
も出来ます(メリット減りますが)

2番は、文章をリソースファイルに書くことによって、リソースファイルを切り替える
だけで、日本語のページと英語のページ、中国語のページ等を切り替えることが
出来ます。

3番はスクリプトレットを使うとMVCの役割分担が崩れます。つまりViewであるJSPに
ModelやControllerの役割を持たせてしまう可能性が生まれます。JSPには表示だけを
させるべきだという考えなのです。

それではソース行ってみよう!

<%@ page language="java" contentType="text/html;charset=Shift_JIS" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> (1)
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> (2)
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> (3)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<HTML>
<HEAD>
<link rel=stylesheet href="base.css" type="text/css">
<META http-equiv="Content-Language" content="ja">
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
<META http-equiv="pragma" content="no-cache">
<title>掲示板</title>
<body>
<h1><bean:message key="title.messageboad"/></h1>
<html:errors/>
<html:javascript formName="forumForm"/> (4)
(5)
<html:form action="/sendMessage" onsubmit="return validateForumForm(this);">
<table>
<tr>
<td class="title">
<bean:message key="label.name"/> (6)
</td>
<td class="content">
<html:text property="name" size="20" maxlength="20"/> (7)
</td>
</tr>
<tr>
<td class="title">
<bean:message key="label.message"/>
</td>
<td class="content">
<html:textarea property="message" rows="5" cols="40"/>
</td>
</tr>
</table>
<html:submit property="submit">送信</html:submit> (8)
</html:form>
<html:link page="/loadMessage.do">リロード</html:link> (9)
<logic:present name="messages" scope="request"> (10)
<logic:iterate id="messageObj" name="messages" scope="request"> (11)
<table>
<tr>
<td class="title">
<bean:message key="label.name"/>
</td>
<td class="content">
<bean:write name="messageObj" property="name" /> (12)
</td>
</tr>
<tr>
<td class="title">
<bean:message key="label.message"/>
</td>
<td class="content">
<bean:write name="messageObj" property="message" />
</td>
</tr>
</table>
<br>
</logic:iterate>
</logic:present>
</body>
</html>

(1)〜(3)でタグリブの場所とコード内で使用する名前を設定しています。
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
は、
「/WEB-INF/struts-html.tldにあるタグリブをこのソースコード内では
htmlという接頭辞を付けて使用します」

という意味です。

(4)はStruts1.1の新機能Validatorを使うためのコードです。
Validatorは設定ファイルを元にFormの入力チェックを行うものです。
Validatorは次回とりあげます。

(5)(7)(8)(9)でそれぞれHTMLの
<form>,<input type="text">,<input type="submit">,<a href>
の代わりに
<html:form>,<html:text>,<html:submit>,<html:link>
を使用してます。

(6)で上記2番の国際化対応です。リソースファイルの中のlabel.nameの
プロパティを出力します。
ファイルの中はこんなイメージです。
label.name=名前

でも実際は
label.name=\u540d\u524d

文字化けしてるのはUnicodeに変換しているからです。Strutsは
リソースファイルをUnicodeで読み込むからです。

Unicode変換はJDK付属の

native2ascii [変換元ファイル] [変換先ファイル]

コマンドで出来ます。

それとリソースファイル名をStrutsに知らせる為に、struts-config.xmlに
<message-resources parameter=[リソースファイル名]/>
と言う記述が必要です。

(10)はif文、(11)はfor文の代わりです。

(12)はBeanのプロパティを取り出して出力しています。
プロパティ値に'<', '>'等のクロスサイトスクリプティングが
行われてしまう可能性のある文字列が含まれる場合自動的に
エスケープしてくれます。'<'は'&lt;'にという感じです。

次回はValidatorの入力チェック機能をとりあげます。
んじゃ
やまろう

スポンサーリンク

-Java

Copyright© やまろうのプログラミングTips , 2024 AllRights Reserved Powered by AFFINGER4.