機能SAMPLE.1 「EzServlet/エミュレータ感覚の操作を可能にする方法」(実装説明)


1月17日の「EzServlet/エミュレータ感覚の操作を可能にする方法 (2009-01-17 - T.RYoken がんばる日記 / TryGun blog)」の実装の仕方の説明です。。。。


まずはHTMLの説明。。。ファイル名を「Hoge.html」とします。
*装飾(CSS)など本質に関係ない内容は記述していません。


<html>
<head></head>
<body>
<form method="POST">
<center>
確認文字表示SAMPLE画面
<tg:out name="comfirmword">確認</tg>
<table>
<tr>
<td>項目1</td>
<td>
<input type="text" name="field" maxlength="10" size="20" value="">
</td>
</tr>
</table>
<br>
<input type="button" name="execute" value="実行">
<br><br>
<tg:out name="message">エラーメッセージ</tg>
</center>
</form>
</body>
</html>
ピンクで記述された箇所(tgタグ)以外は、ピュアなHTMLです。
ピンクで記述された箇所(tgタグ)は、EzServletの専用タグになります。

の「<tg:out name="comfirmword"></tg>」は、状況に対応した「確認文字(空白、MISS、確認、完了)」を表示するための出力表タグです。

ピンクの「<tg:out name="message"></tg>」は、エラーメッセージを表示するための出力表タグです。

Viewは、以上の設定で完了です。

補足:EzServlettg専用タグについては、「学習用Webフレームワーク作成 その1(リベンジ)(2008-12-22 - T.RYoken がんばる日記 / TryGun blog)」を参照して下さい。




次に「Hoge.html」の「入出力値の格納」と「検証」を行うDTOクラスの説明をします。
ソース名は、「Hoge.java」とします。


public class Hoge implements Serializable {
/** Hogeに対応するコントロラークラスを保持する属性です */
public static final Class CONTROLLER_CLASS = HogeController.class;
/** 確認文字「comfirm」の情報を保持する属性です。*/
public String comfirmword;
/** エラーメッセージ「message」の情報を保持する属性です。*/
public String[] message;
/** 入力項目「field」の情報を保持する属性です*/
public String field;
/** 入力値の検証をするメソッドです。*/
public void validate(EzResponse response) {
// 妥当性チェックをないます。
EzMessage message = ...
// 妥当性チェック結果を判別します。
if(message.isError()) {
// エラーメッセージをセットします。
hoge.setMessage(message.getMessage());
// EzResponseに示するHtmlのBeanをセットします。
response.setPage(hoge);
// 後続処理を中断し、エラー画を示します。
response.finish();
}
}
}
DTOクラスは、上記にも記述した通り、HTMLの「入出力値の格納」と「検証」を行うクラスです。
HTMLとDTOクラスの関係は、一対一の関係になります。
DTOクラスのプロパティーについて簡単に説明します。

1.「public static final Class CONTROLLER_CLASS = HogeController.class;」
  Hoge.htmlに対応するコントローラークラスを宣言します。
  コントローラークラスは、Hoge.htmlの「ボタン」が押された時の処理を制御するクラスです。
2.「public String comfirmword;」
  Hoge.htmlの「<tg:out name="comfirmword">」タグに対応した出力用プロパティーです。
  状況に対応した「確認文字(空白、MISS、確認、完了)」をセットします。
3.「public String[] message;」
  Hoge.htmlの「<tg:out name="message"></tg>」タグに対応した出力用プロパティーです。
  エラーメッセージをセットします。
4.「public String field;」
  Hoge.htmlの「<input type="text" name="field">」タグに対応した入力用プロパティーです。
  画面で入力された値がセットされます。

今回、直接関係するのは、2の「public String comfirmword;」になります。



最後に、「Hoge.html」の「ボタン」が押された時に呼び出されるCONTROLLERクラスの説明をします。
ソース名は、「HogeController.java」とします。


public class HogeController {
/** HttpSession情報を保持する属性です */
public EzSession session;
/** HttpServletRequest情報を保持する属性です */
public EzRequest request;
/** HttpServletResponse情報を保持する属性です */
public EzResponse response;
/** Hogeの初期画面表示要求があった場合に呼び出されるメソッドです */
public void index(Hoge hoge) {
// EzResponseに示するHtmlのBeanをセットします。
response.setPage(hoge);
}
/** 「実行」ボタンが押された時に呼び出されるメソッドです */
public void execute(Hoge hoge) {
// 確認表示項目に「MISS」文字をセットします。
hoge.confirmword = "MISS";
// 画入力値をHogeにセットします。
request.set(hoge);
// 入力値の妥当性検をないます。
hoge.validate(response);
// 入力項目の打ち変えが在ったかを判別します。
if(request.isChange()) {
// 打ち変え"あり":「確認」文字をセットします。
hoge.comfirmword ="確認";
} else {
// 打ち変え"なし":「完了」文字をセットします。
hoge.comfirmword ="完了";
// 入力値にnullをセットします。
hoge.field = null;
}
// 表示するHtmlのDTOをセットします。
response.setPage(hoge);
}
}
HogeControllerのプロパティーの説明を簡単にします。詳細は、「学習用Webフレームワーク作成 その1(リベンジ)(2008-12-22 - T.RYoken がんばる日記 / TryGun blog)」を参照してください。

1.「public EzSession session;」
  EzSessionクラスは、アプリの利用が開始されてから終了するまで、利用可能なオブジェクト
  格納領域です。
2.「public EzRequest request;」
  EzRequestクラスは、クライアントからの要求から返答(応答)まで、利用可能なオブジェクト
  格納領域です。画面の入力値がセットされます。
3.「public EzResponse response;」
  EzResponceクラスは、クライアントへの返答(応答)クラスになります。
  クライアントへ表示する画面の設定、またはクライアントへダウンロードファイルの送信を
  行うクラスです。

HogeControllerのメソッドについて説明します。

1.「public void index(Hoge hoge)」
  Hoge.htmlの「初期画面」の表示を行うメソッドです。
  この段階では、「確認文字」は空白が表示されます。
2.「public void execute(Hoge hoge)」
  Hoge.htmlの「実行」ボタン(< input type="text" name="execute">)が押された時に呼び
  出されるメソッドです。
  まず始めに「確認文字」に「MISS」をセットします。
   ソース:hoge.confirmword = "MISS";
  次に、画面入力値をDTO(Hoge.java)にセットします。
   ソース:request.set(hoge);
  次に、入力値の検証を行います。
   ソース:hoge.validate(response);
  検証の段階でエラーが発生した場合は、後続処理を中断し、エラー画面を表示します。


  検証でエラーが無かった場合は、入力値の打ち変えが在ったかを判別します。POINT!!!
   ソース:if(request.isChange())
  *EzServletで提供する、EzRequest#inisChangeメソッドで、入力値の打ち変えがあったかが判別できます。


  後は打ち変えの有無により、表示内容を変更するだけです!


超かーんたーん(o^∀^)oネッ♪




最後に…エミュレータ感覚の操作が可能になる利点について

打ち変えの有無が判断できることにより、Webシステム特有の確認画面を作成する必要がなくなります。これにより、「入力画面」→「確認画面」→「完了画面」の画面遷移が不要になります。


つまり、「確認画面」、「完了画面」がいらなくなるということです。


これに伴い、以下の3つの遷移も不要になります。

1.「確認画面」→「入力画面」
2.「完了画面」→「確認画面」
3.「完了画面」→「入力画面」

これで、4遷移分の「設計」&「実装」&「テスト」工数を大幅に削減する事が出来ます。
これにより、開発生産性&保守性UP!!!


また、この機能は、開発者だけでなく、利用者(ユーザー)に対するメリットも大きいと考えます。
現在のWebシステムですと、確認画面で間違いを見つけた場合は、一旦入力画面に戻った上で、内容を変更する必要がありました。が、その操作は不要になります。


--追記--
エラーがあった場合の入力項目の反転およびカーソルセットは、EzServletで内部的に行っています。
実現方法の詳細は別途記述しますが、簡単な説明を…
入力項目(<input type="text" name="field">)の項目名となるプロパティー・キー(label.field)がエラーメッセージで利用されると項目が反転します。
また、カーソルのセット位置は、最初に発生したエラー項目にセットされる仕様にねっています。
注意:この機能の利用の要否は、プロジェクト毎に設定可能です。