サンプルアプリ2
このアプリケーションは、4つの画面で構成されます。
- 検索条件入力画面
- 検索結果一覧画面
- 編集画面
- 確認画面
最初は、検索条件入力画面です。従業員名か部署を指定することができます。部署はリストから選択します。HTML(employeeSearch.html)は次のようになります。重要でないところは省略してます。
関連するコードを自動生成しましょう。employeeSearch.htmlを右クリックして、コード自動生成を選びます。出てくるダイアログで幾つかオプションを指定します。
<form id="employeeSearchForm">
従業員名:<input id="name" type="text"/>
部署 :<select id="departmentId" size="2">
<option>Please select
<option value="1">Accounting
<option value="2">Research
</select>
<input id="doFindEmployee" type="submit" value="find"/>
</form>
- 関連するEntityには、Employeeを指定します。
- 自動生成タイプには、検索条件入力画面を指定します。
- この自動生成タイプは、ユーザが追加することもカスタマイズすることもできます。
自動生成のボタンをクリックしてソースを作成します。できたソースを見てみましょう。
EmployeeSearchPage.java
HTMLのファイル名の最初を大文字にし、Pageをsuffixにつけたクラスが自動生成されます。ソースは次のようになります。Java5と1.4の環境では、吐き出されるソースコードが異なります。今回は、Java5の例です。nameプロパティは、HTMLのid属性から来ています。
public class EmployeeSearchPage {
//@Navigation(to=)
public static final String SUCCESS = "success";private String name;
//@SelectOneMenu(label="*Name")
private int departmentId;
private ListdepartmentIdItems;
private DepartmentLogic departmentLogic;
private EmployeeSearchDxo dxo;...
public String initialize() {
//TODO
departmentIdItems = departmentLogic.findAll();
return null;
}public String doFindEmployee() {
//TODO
return SUCCESS;
}
}
departmentIdプロパティは、HTMLのid属性から来ています。なぜ、型がintだと分かるのでしょうか。ソースコードを自動生成するときに、このページのベースEntityはEmployeeだと指定しています。Employeeには、departmentプロパティがあり、その型はDepartementです。さらにDepartmentにはidというプロパティがあり、型はintです。これらの情報によりツールが適切な型を推測します。適切な型が推測できなかった場合には、Stringとみなします。
selectタグで選択された値は、自動的にidに関連付けられたプロパティに格納されます。それでは、selectタグのoptionはどのようにして知ることができるのでしょうか。Teedaは、selectタグのid + "Items"のプロパティがあれば、その情報から、optionの情報を組み立てます。optionに設定するvalue属性とボディ(HTMLの例だとAccountingだとか)はどのようにして組み立てるのでしょうか。Teedaは*Itemsで指定されているCollectionから要素を取り出し、その要素にid属性があれば、それをvalue属性に設定します。ボディの値は、@SelectOneMenuのlabel要素で指定されたプロパティを使います。@SelectOneMenu(value="id",label="name")のように明示的に指定することもできます。nameと指定するとDepartment.nameがリストに表示されます。
churaは、*Itemsの要素がDepartmentであることを知っているので、DepartmentLogicへの参照も自動的にプロパティに追加します。また、リストに表示するので、Departmentを全件取得するんだろうと予想し、initialize()でdepartmentLogic.findAll()を呼び出します。churaは、findAll()が全件取得のメソッドであることも知っているのです。
Teedaは、initialize()というメソッドがあれば、ページを表示する直前に自動的に呼び出します。
自動生成されたソースコードを最初そのまま実行してみましょう。HOT deployに対応してますから、ソースコードを生成した後に、アプリケーションサーバを再起動する必要はありません。部署のリストには、AccountingとResearchと表示されています。Departmentのデータを取得しているはずですが、HTMLに記述した内容がそのまま表示されています。
次に@SelectOneMenuのコメントをはずして、@SelectOneMenu(label="name")に書き換えてemployeeSearch.htmlを再実行してみましょう。Departmentの内容が全件表示されました。@SelectOneMenuの指定が有効になったのです。
ボタンをクリックしてみましょう。まだ、何も記述していないので、何も起きません。
おっと時間だ続きはまた今度。doFindEmployee()の記述からです。