1) XHTMLによる画面開発
WeberではJSPの代わりにXHTMLでWebページを作成します(JSPでの開発も可能ですが、Weber4.0以降
からはXHTMLによる開発を推奨しています)。
XHTMLはWebページを記述するためによく使われるHTMLを、XMLに適合するように定義し直した
マークアップ言語で、WeberフレームワークはこのXHTMLとWeberフレームワーク独自のタグ
を組み合わせることにより、HTMLベースの動的な画面を開発することができます。
まずは簡単なサンプルから見ていきましょう。
ここで紹介するWebアプリケーションの構成は以下のとおりです
2) 入力画面の作成 (hello_input.html)
まず入力となる画面を作成します。
<html>
<head>
<title>Hello</title>
<link rel="stylesheet" type="text/css" href="./../../css/stylesheet.css"/>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<font color="red">
<span w_kind="error"/>
</font>
<form method="post" action="./html_4_0/hello/show.wb">
<input type="hidden" name="w_operate" value="NoOpAction"/>
名前を入力してください<br/>
例)ios tarou<p/>
<input name="name" value="${name}"/><p/>
年齢を入力してください<br/>
<input name="age" value="${age}"/><p/>
<input type="submit" value="送信"/><br/>
</form><p/>
</body>
</html>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
行でHTMLのエンコードを指定しています。
charsetの部分には使用する文字コードを Shift_JIS(シフトJIS)、euc-jp(EUC)、
iso-2022-jp(JISコード)、UTF-8(Unicode:UTF-8)などを指定します。
XHTMLは、HTMLで使用できる要素や属性をそのまま利用して、XMLの規則に従って再定義
し直したものです。
その為、XHTML文書はHTML文書よりタグが厳密な記法に従っています。
HTML文書をでのタグの記述は次の規則に従う必要があります。
Weberフレームワークでは上記の記法に従わないXHTML(HTML)文書は、構文解析時に
エラーを返します。
又、以下のタグはWeber独自のタグで、フォームの入力チェックでエラーになった場合、
このエリアにエラーメッセージを出力します。
3) 出力結果画面の作成(hello_show.html)
次に出力結果を表示する画面を作成します。
<html>
<head><title>ようこそ</title>
<link rel="stylesheet" type="text/css" href="./../../css/stylesheet.css"/>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<p>ようこそ<span w_kind="write" w_value="${hello.name}">太郎</span>さん<br/></p>
<p>
${hello.name}さんは${hello.age}歳ですね。<br/>
<span w_kind="equal" w_name="hello" w_property="age" w_value="20">
今年は成人式ですね。<br/>
</span>
<span w_kind="meq" w_name="hello" w_property="age" w_value="20">
たばこ吸えますね。<br/>
</span>
<span w_kind="lthan" w_name="hello" w_property="age" w_value="20">
たばこ吸えませんね。<br/>
</span>
来年は${mathC.add(hello.age, 1)}歳ですね
</p>
<p>
<li>登録済みの名前一覧</li>
<table border="1">
<tr>
<td>名前</td><td>年齢</td>
</tr>
<span w_kind="iterate" w_id="person" w_name="personList" >
<tr>
<td><span w_kind="write" w_value="${person.name}">太郎</span>さん</td>
<td><span w_kind="write" w_value="${person.age}">32</span>歳</td>
</tr>
</span>
</table>
</p>
</body>
</html>
「${hello.name}」と記述された箇所はJSP2.0で採用されたEL式に似たような動きをします。
${hello.name}部はサーバでセットされたhelloオブジェクトのメンバであるnameを出力することを
表します。
以下のタグは、条件分岐を行います。
w_kind=の右辺に指定する値はequal, mthan, lthan, mequal, lequal等を指定します。
w_value=の右辺には比較対象となる値を直接入力するか、EL式を指定します。
4) アクションクラスの作成(HelloShowAction.java)
このサンプルのアクションクラスです。
package weber_4_0_sample.org.itscool.hello;
import java.util.ArrayList;
import org.itscool.commons.util.InputCheckUtil;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
import org.itscool.weber.controller.Globals;
public class HelloShowAction extends Action{
//入力チェック
public String doValidate(ActionBucket bucket){
String ret = Globals.RET_SUCCESS;
String name = (String)bucket.getParameter("name");
String age = (String)bucket.getParameter("age");
//名前未入力チェック
if (name ==null) {
putMessage("name","名前を入力してね");
ret = "input";
//全角チェック
}else if(!InputCheckUtil.checkFullSize(name)){
putMessage("name","名前は全角で入力してね");
//入力エラーの場合はhello_input.html画面に戻ります
ret = "input";
}
//年齢未入力チェック
if( age==null ){
putMessage("age","年齢を入力してね");
ret = "input";
//半角数値チェック
}else if(!InputCheckUtil.checkDigit(age)){
putMessage("age","年齢は半角数字を入力してね");
ret = "input";
}
//入力チェックが正常の場合はGlobals.RET_SUCCESSを返します。
//doValidateメソッドの戻り値がGlobals.RET_SUCCESSの場合、
//doExecuteメソッドが実行されます。
return ret;
}
public String doExecute(ActionBucket bucket){
Hello hello = (Hello)bucket.getForm();
String newName = hello.getName().toUpperCase();
hello.setName(newName);
bucket.setAttribute("hello", hello);
ArrayList personList = (ArrayList)bucket.getAttributeFromSession("personList");
if( personList == null){
personList = new ArrayList();
bucket.setAttributeFromSession("personList", personList);
}
personList.add(hello);
return "show";
}
}
5) フォームクラスの作成(HelloBean.java)
入力画面にセットされたリクエストパラメータを受け取るためのクラスです。
package weber_4_0_sample.org.itscool.hello;
public class Hello {
private String name;
private int age;
public String getName() { return name; }
public void setName(String string) { name = string; }
public int getAge() { return age; }
public void setAge(int i) { age = i; }
}
6) リクエストとアクションのマッピングについて
Weber4.0にはアクションマッピングファイル(weber-config.xml)を省略することが
できます。
アクションマッピングファイルを省略する代わりに 、ある一定のルールに従った
HTMLファイルとJavaクラスを作成し、リクエストを発行する際も一定のルールに
従う必要があります。
以下のリクエストURIを例にリクエストとアクションクラスのマッピングルールについて 解説します。
"Webアプリケーションのパス/.../"の部分までは任意ですが、"モジュール名/アクション名.wb"
の部分が、フォームクラス、アクションクラスと対応します。
まず、リクエストURIに対応するフォームクラス名は以下のようになります。
フォームクラスはモジュール名から"_(アンダースコア)"を除去し、アンダースコアの次の文字と
頭文字を大文字に置き換えたものがクラス名になります。
(例:モジュール名 mail_address -> フォームクラス名 MailAddress )
リクエストURIに対応するアクションクラス名は以下のようになります。
アクションクラスのアクション名はモジュール名にアクション名(頭文字大文字)を
加えたものになります。
(例:リクエストURI /web-app/・・・/mail_address/get.wb -> アクション名 MailAddressGetAction )
尚、パッケージ名については、最下層のパッケージがモジュールの名前となり、
それより上位のパッケージがルートパッケージといった位置づけになります。
ルートパッケージの定義はdi-config.xmlのpkgName要素で設定します。
7) 実行