1) はじめに
チュートリアルでは、WeberCreatorを使ったWeberアプリケーションの作成と実行までの
手順を解説してきました。
ここでは、WeberCreatorが生成したファイルの中身について解説していきたいと思います。
2) ディレクトリ構成
まずはチュートリアルで作成したディレクトリ構成から見ていきましょう。
チュートリアルで作成したディレクトリ構成は以下のようになっています。
WeberCreatorで雛形の生成を実行すると、以下のファイル、フォルダが生成されます。
ここで、Weber3.x以前を利用していた方なら、 アクションマッピング定義ファイル(weber-config.xml)が無いことに 気付かれるのでは無いでしょうか?
アクションマッピング定義ファイルとは、UIであるHTMLやJSPファイルとアクションクラスとの紐付け
を定義したファイルで、Weberフレームワークはこの定義ファイルの内容に沿って、リクエストに
対応するアクションクラスの呼出や画面遷移をコントロールしてきました。
Weber4.0では、このアクションマッピング定義ファイルをベースとしたコントロールの考え方を
改め(もちろん従来のアクションマッピングベースのアプリケーションを構築することも可能です)
、ある一定のルールに従ったHTMLファイルとJavaクラスを作成することにより、
リクエストに対応するアクションクラスの呼出や画面遷移を自動で行うことができるように
なりました。
(いわゆる、定義よりも規約重視とか呼ばれるものです)
たとえば、messageモジュールのクラスを見てみると以下のクラスが生成されています。
又、WeberCreatorが生成するWebページは全てHTML(XMLのヘッダ部を取り除いたXHTML形式)で
以下のようなコンテンツが作成されます。
3) メッセージ入力時の確認画面を追加する
HTMLファイル、Javaソースの説明が終わったところで、今度は先ほど作成したメッセージ登録画面 に、確認画面を追加してみましょう。
追加するHTMLファイルとJavaソースは以下の通りです。
HTMLは、確認用の画面(message_confirm.html)を追加しました。
又、確認用のアクションにはMessageConfirmAction.javaを追加しています。
画面のイメージはこんな感じになります。
メッセージ登録画面(見た目の変更はありません)

メッセージ確認画面(メッセージ登録画面から"登録"ボタンを押下した場合)
又、メッセージ確認画面を表示する前に、入力項目のチェックを行い、 ユーザ名などが入力されていなかった場合に、メッセージ登録画面に戻って エラーメッセージを表示するようにしてみます。

メッセージ登録画面でユーザ名を入力しなかった場合
それでは早速、HTMLソースとJavaソースを作成してみましょう・
(1) message_confirm.html
<html>
<head>
<title>メッセージ確認画面</title>
<link rel="stylesheet" type="text/css" href="./../../css/stylesheet.css"/>
</head>
<body>
<p><strong>メッセージ確認画面</strong></p><hr/>
この内容で登録してよろしいですか?<br/>
<form name="message_form" method="post" action="./web-contents/message/regist.wb">
<input type="hidden" name="id" value="${message.id}"/>
<input type="hidden" name="userName" value="${message.userName}"/>
<input type="hidden" name="subject" value="${message.subject}"/>
<input type="hidden" name="contents" value="${message.contents}"/>
<p>ユーザ名(userName) :${message.userName}</p>
<p>サブジェクト(subject) :${message.subject}</p>
<p>内容(contents) :${message.contents}</p>
<p>
<input type="submit" nanme="submit_regist" value="実行"/>
<input type="submit" name="submit_cancel" value="キャンセル"/>
</p>
</form>
<p><a href="./../../index.html">Top</a></p>
</body>
</html>
HTMLソースの記述は、XHTM形式である必要があります(くわしくはこちら
をご参照下さい)。
ただし、ヘッダ部の記述は省略可能です。
メッセージ確認画面は、メッセージ登録画面で"登録"ボタンを押下したときに表示される画面
で、前画面で入力した内容が表示されます。
実行ボタンあるいはキャンセルボタンを押下した場合は、message/regist.wbがPOSTされます。
従って実行されるアクションはMessageRegistAction.javaになります。
(2) MessageConfirmAction.java
package sample.message;
import java.util.List;
import org.itscool.weber.action.Action;
import org.itscool.weber.action.ActionBucket;
import org.itscool.commons.dao.BaseDao;
//登録画面で入力した内容をチェックします。
//必須項目が入力されていない場合は"regist"を返します。
//必須項目が全て入力されている場合は"success"を返します。
public class MessageConfirmAction extends MessageBaseAction {
public String doValidate(ActionBucket bucket){
boolean ret = true;
if(!isNotNull("userName") ){
//登録画面に出力するメッセージをセットしています。
//第1引数は、任意のユニーク値をセットし、
//第2引数に、出力するメッセージを指定してください。
this.addErrorMessage("E0001", "ユーザ名を入力してください。");
ret = false;
}
if(!isNotNull("subject") ){
this.addErrorMessage("E0002", "サブジェクトを入力してください。");
ret = false;
}
if(!isNotNull("contents") ){
this.addErrorMessage("E0003", "コンテンツを入力してください。");
ret = false;
}
//入力エラー時
if( ret == false ){
//外部参照データの一覧を取得
CategoryDao categoryDao = new CategoryDao();
Object categoryList = categoryDao.getAllData();
bucket.setAttribute("categoryList", categoryList);
//登録画面に戻る
return "regist";
}
//メイン処理(doExecute())を実行する
return "success";
}
/**
* 確認画面を表示するために、メッセージ内容をセットしています
* @param bucket ActionBucketインスタンス
* @return 実行結果を返します(遷移先のファイル形式はモジュール名_実行結果.拡張子)
*/
public String doExecute(ActionBucket bucket) throws Exception{
Message bean = (Message)bucket.getForm();
bucket.setAttribute("message", bean);
return "confirm";
}
}
MessageConfirmAction.javaはメッセージ登録画面で"登録"ボタン押下時に呼ばれるアクション
です。
doValidateメソッドは、メッセージ登録画面で入力された内容をチェックするための処理
でメイン処理(doExecuteメソッド)よりも先に実行されます。
必須項目に入力されていない箇所が存在する場合は"regist"を返却し、メッセージ登録画面に
戻るよう指定しています。
入力内容が全て正しい場合は"success"を返却します。
この場合、次の処理"doExecuteメソッド"が実行されます。
Actionクラスには、doValidate、doExecute以外に以下のメソッドをオーバーライドすること
ができます。
@ doInit( ActionBucket bucket ) throws Exception
アクション開始前の初期化処理を実装します(任意)
A doValidate( ActionBucket bucket ) throws Exception
入力チェック処理を実装します(任意)
B doExecute( ActionBucket bucket ) throws Exception
メイン処理を実装します(必須)
C doFinalize( ActionBucket bucket ) throws Exception
アクションの終了処理を実装します(任意)
(3) message_regist.html修正
<!-- <form name="message_form" method="post" action="./web-contents/message/regist.wb"> --> <form name="message_form" method="post" action="./web-contents/message/confirm.wb">
メッセージ登録画面(message_regist.html)のformタグを上記のように修正してください。
これにより、メッセージ登録画面で"登録"ボタンを押下した場合は、"MessageRegistAction.java"
ではなく、"MessageConfirmAction.java"が呼ばれるようになります。
(4) MessageRegistAction.java修正
public String doExecute(ActionBucket bucket) throws Exception{
Message bean = (Message)bucket.getForm();
//キャンセルが選択された場合の処理を追加
if(bucket.getParameter("submit_cancel") != null){
//登録画面に戻る
bucket.setAttribute("message", bean);
return "regist";
}
(以下略)
メッセージ確認画面で"実行"ボタンが押されたのか、あるいは"キャンセル"ボタンが押下された
のかを判定しています。
キャンセルが押下場合は、"regist"を返却し、メッセージ登録画面に戻るよう指示しています。
ここまでの作業が終了したら、ソースをコンパイル、デプロイし、動作を確認してみてください。