サンプルアプリケーションの実装詳細 - 2
基本的なJSPの作成
NetUIにおけるJSPの作成方法は基本的にStrutsなどと同じです。異なるのはNetUIの専用のタグで記述するところです。次にformを含んだ簡単なJSPの例を記述します。
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://beehive.apache.org/netui/tags-databinding-1.0"
prefix="netui-data"%>
<%@ taglib uri="http://beehive.apache.org/netui/tags-html-1.0"
prefix="netui"%>
<%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0"
prefix="netui-template"%>
<netui:html>
<head>
<title>……</title>
<netui:base/>
</head>
<netui:body>
……
<netui:form action="……">
……
</netui:form>
……
</netui:body>
</netui:html>
html、bodyタグには、<netui:html>、<netui:body>を使用します。Formには<netui:form>というタグを使用し、action要素にコントローラーに記述したアクションメソッド名を記述します。サンプルアプリケーションでは、loginProcess、inputMemoProcessとなります。例えば、loginProcessの方のFormの実装を見てみます。
<netui:form action="loginProcess"> Login ID: <netui:textBox dataSource="actionForm.id"/> <br/> Password: <netui:textBox password="true" dataSource="actionForm.password"/> <br/> <netui:button type="submit" value="ログイン"/> </netui:form>
ここで、テキストフィールドを表現するために<netui:textBox>タグを使用しています。<netui:textBox>タグのdataSourceプロパティには対応するフォームのフィールド名を設定しています。ここではそれぞれ、actionForm.id、actionForm.passwordとなっていますが、これは、loginProcessに対応するFormであるLoginFormのid、passwordフィールドにマッピングさせています。これにより、Formをサブミットした際に、コントローラー側で入力された値をマッピングしたloginProcessのフォーム(LoginForm)を生成します。
NetUI-JSPタグライブラリ
NetUIには以下の3種類のタグライブラリがあります。表に概要をまとめました。
| 種類 | TLDファイル名 | サンプルでの別名 | 概要 |
| NetUIタグ・ライブラリー | netui-tags-html.tld | netui | HTML系のタグライブラリ |
| NetUIデータ・タグ・ライブラリー | netui-tags-databinding.tld | netui-data | フォーム、コントローラーのデータをJSPとバインドするために使用 |
| NetUIテンプレート・タグ・ライブラリー | netui-tags-template.tld | netui-template | JSPファイルからテンプレートを作るために使用 |
この中で主に使用されるのは、NetUIタグ・ライブラリーになります。基本的にStrutsのhtmlタグと似ているのでStrutsの経験があれば、困ることはないでしょう。次に、具体的に使用されるタグを表にしました。
| タグ名 | 概要 |
<netui:anchor> | アンカーを表示する |
<netui:form> | フォームタグを生成する |
<netui:textBox> | text、passwordのタグを生成する |
<netui:button> | submit、reset、buttonのタグを生成する |
<netui-data:repeater> | Strutsの<logic:iterate>のように繰り返し処理に使用する |
<netui-data:message> | メッセージを出力する |
この中で、サンプルアプリケーションにはないものの、よく使われる複数行の繰り返し表示を<netui-data:repeater>を使用した方法で簡単に解説しておきます。<netui-data:repeater>はプロパティとしてdataSourceをとり、この値には繰り返し処理の対象となるコレクション・配列を指します。さらに、<netui-data:repeater>タグの中で、コレクション・配列の要素を取得し、出力しています。
<table> <netui-data:repeater dataSource="actionForm.userList"> <tr><td>${container.item.usrId}<br/></td></tr> <tr><td>${container.item.usrName}<br/></td></tr> </netui-data:repeater> </table>
Validate
Strutsと同じようにNetUIにもValidationが存在し、定義はアノテーションによって行われます。例えば、ログイン処理の際に、ログインIDが入力されていなかった場合にログイン画面に遷移し、エラーを表示する記述は次のようになります。
@Jpf.Action(
forwards={
@Jpf.Forward(name="success", path="input.jsp")
},
validatableProperties={
@Jpf.ValidatableProperty(
propertyName="id",
displayName="loginID",
validateRequired=@Jpf.ValidateRequired()
)
},
validationErrorForward=@Jpf.Forward(name="fail", path="login.jsp")
)
public Forward loginProcess(LoginForm form)
{
return new Forward("success");
}
対象のアクションにつけられた@Jpf.Actionアノテーションの中に、 validatablePropertiesを記述し、その中に@Jpf.ValidatablePropertyアノテーションを記述します。@Jpf.ValidatablePropertyアノテーションの中には、フォームの中のvalidate対象フィールド名のpropertyName、エラー時の表示名を表すdisplayName、さらにvalidate内容を加えます。また、ここでは必須チェックのため、validateRequired=@Jpf.ValidateRequired()を使用しています。これ以外にも、次のようなvalidationがあらかじめ用意されています。
| validation | 概要 |
validateEmail=@Jpf.ValidateEmail() | 妥当なEメールであるかどうか |
validateMinLength=@Jpf.ValidateMinLength(chars = x) | 文字列が指定された文字数より大きいか |
validateDate=@Jpf.ValidateDate(pattern="x") | 日付が指定された形式にマッチするか |
validationでエラーを検知した場合には、アクション処理を行わず、その下に記述されている、validationErrorForward=@Jpf.Forward(name="fail", path="login.jsp")により、「login.jsp」に遷移します。「login.jsp」でエラーメッセージを出力する場合には次のように記述します。
<netui:errors> <!--すべてのエラー --> ……<中略>…… <netui:error value="id" /> <!--idのエラー -->
まとめ
今回は参考資料にも載せた『Apache Beehiveの開発を体験する(コントロール作成編)』の続編としてNetUIについて解説をしました。NetUIを含めApache Beehiveは、J2EEのアプリケーション開発をより効率よくパワフルに開発するライブラリとして開発が進められています。そして、そのJ2EEアプリケーションの中には、今後のビジネスアプリケーション開発の主流とも言われるSOA(サービス指向アーキテクチャ)も含まれています。SOAは機能をWebサービスとして分散して開発するものと言われていますが、WebサービスはApache BeehiveプロジェクトのWeb Service Metadataによって簡単に開発できます。
本稿が新たなビジネスアプリケーション開発手法への足がかりとなれば幸いです。
参考資料
- Apache Beehive
- CodeZine 『Apache Beehiveの開発を体験する(コントロール作成編)』 WINGSプロジェクト 佐藤真介 著、翔泳社、2006年5月
