Eclipseプラグイン「Dolteng」のScaffoldという自動生成機能やSeasar 2.4のHOT deploy機能を利用して、DBの参照・更新・削除ができるSAStrutsのWebアプリを作ります。Java初心者だけでなくStrutsに慣れた開発者も必見です
超俊敏にJavaのWebアプリケーションを作るための便利なツールを紹介する本連載も今回で4回目です。前回の「サーバ再起動不要のSMART deployとバリデーション」では、バリデーション(入力チェック・検証)についてStrutsとSAStrutsを比較し、超俊敏に開発するうえで欠かせない「SMART deploy」とは何かについて解説しました。
今回はJSPの話です。このJSPの話で、SAStrutsをプレゼンテーション層、サービス層、パーシステンス層と分けたときにプレゼンテーション層の流れはすべて追ったことになります。つまり、SAStrutsの基本機能を利用し、HTMLを返すことができるようになったといえます。SAStrutsを利用するうえでJSP記述に便利なSAStrutsのカスタムタグやファンクションについて説明します。
なお今回の記事でも連載第1回の『1分でWebアプリを作れるEclipseプラグイン「Dolteng」』で作成した環境を使用します。まだ読んでいない方は、第1回記事から順番に読むことをお勧めします。
また今回は、便利なSAStrutsをさらに便利に使うためのEclipseプラグイン「SAStruts Plugin」の機能についても紹介します。
SAStruts Pluginには以下の3つの機能があります(下記リストはインデックスになっています)。
開発者が面倒くさいと思うわずかな部分を見事に埋めてくれます。
Actionの戻り値で指定されたURLがJSPのとき、対応するJSPが呼び出されJSPの処理が実行されます。
関連するJSPは文字列のURLのとおりなので、自分でファイルを探してもよいのですが、ここでSAStruts Pluginの1つ目の機能を使ってみましょう。
1つ目のSAStruts Pluginの機能はJavaファイルから関連するJSPファイルへショートカットで簡単に飛ぶことができます。JSPファイル名が記述されている文字列のある行でショートカットキー[Ctrl]+[F8]を押してください。関連するJSPファイルに一瞬にして飛べるはずです。また、JSPファイルからJavaファイルへも同じショートカットキーで飛ぶことができます。
もし、関連するJSPファイル、Javaファイルが見つからない場合、自動的に作成のためのダイアログボックスが表示されます。
これによって、StrutsではJSPファイルとJavaファイルを自分で探しながら交互に、「Javaを直して→反対のファイルを探して→JSPを直して」としていたものがショートカットキーだけで関連ファイルを行き来できるので、わずかな違いですが、開発のノイズを減らすことができ、開発ストレスを軽減してくれます。それは最終的に生産性の差となって表れると思います。
次に、SAStrutsのカスタムタグの説明をしましょう。といっても、現在用意されているタグはわずか3つです。SAStrutsは少しのソースで大きくサポートされるように作られているので、覚えるものの数が非常に少ないです。SAStrutsで用意されているタグは以下の3つです(下記リストはインデックスになっています)。
それでは、1つずつカスタムタグの説明をしましょう。
<s:form>タグは、Strutsのカスタムタグの1つ<html:form>タグに代わるものです。<html:form>タグでは、Actionパスの再計算が行われないため、相対パスなどで記述すると同じページにアクセスするたびに、URLがずれてしまう問題がありました。
SAStrutsで用意されている<s:form>タグではaction属性を設定したリンクのURLを基準として、パスが「/」で始まっている場合、コンテキストルートから見た絶対パスになります。パスが「/」で始まっていない場合、JSPファイルから見た相対パスが計算されて設定されます。
この自動計算により、リクエストのパスが「/dept」であっても「/dept/list」であっても、相対パスで入力してあっても出力URLがずれたりすることがなくなります。
<s:link>タグは先ほど紹介した<s:form>タグのリンク版です。Strutsの<html:link>タグに代わるものです。href属性を設定するときに<s:form>と同様のパスの計算が行われ同様に出力URLがずれることがなくなります。
<s:submit>タグはStrutsの<html:submit>タグに代わるものです。すでに前回のバリデーションのところで出てきました。
<s:submit>タグを使用すると、簡単にクライアントバリデーションが設定できます。clientValidate属性にtrueを設定するとクライアントバリデーションができます。詳しい話は前回記事を参照してください。
JSPを書くときは、SAStruts Pluginの機能の2つ目の機能が役立ちます。Eclipseに標準で備わる[JSP Editor]では、JSPのコード補完をまったくできませんでした。しかし、SAStruts Pluginを導入することにより、JavaファイルだけでなくJSPファイルのときもActionFormなどのプロパティを参照し候補を表示してくれます。これによって、さらにJSPのコーディングが楽になると思います。
少し古いプロジェクトでStrutsを使っていた人は「あれ?」っと思った人がいるかもしれません。Strutsのできた時代はJSP 1.xだったため、タグである必要がないものもタグとして定義されています。しかし、JSP 2.0からは「EL式」というものが用意され、簡単にメソッドを呼び出せるようになりました。ここからは少しだけ、この紹介を行いたいと思います。
Strutsで値を出力するには<bean:write>タグを使用していたと思います。例えば、以下のような感じです。
<bean:write name="usrdata" property="userId" />
これをEL式で書くと、以下のようになります。
${f:u(usrdata.userId)}
ほとんど必要なパラメータのみを記述するだけになります。全体で見たときに非常にスマートになります。
またJSP 1.xでは、タグは重ねることができませんでしたが、EL式は重ねて、そのメソッドを呼び出すことができます。
後述するSAStrutsのファンクションの使用例でもありますが、「HTMLエスケープしたい」さらに「空白は空白のまま表示したい」「そして改行したい」というときには、以下のように重ねればすべて処理されます。
${f:br(f:nbsp(f:h(textarea)))}
<logic>タグで書いていたものなども、JSTL(Java Standard Tag Library)とEL式を組み合わせれば、カスタムタグを使うより記述量が少なくスマートな形で記述できることが多くなっています。
SAStrutsでも、EL式を拡張したファンクションが現在以下の8つ用意されています(下記リストはインデックスになっています)。
次ページでは、これも1つずつ具体的なコードとともに説明します。また、JSPでSAStrutsのカスタムタグやファンクションを使うための設定をして実行してみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.