ひがやすを技術ブログ

電通国際情報サービスのプログラマ

サンプルアプリ2

このアプリケーションは、4つの画面で構成されます。

  • 検索条件入力画面
  • 検索結果一覧画面
  • 編集画面
  • 確認画面

最初は、検索条件入力画面です。従業員名か部署を指定することができます。部署はリストから選択します。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>
関連するコードを自動生成しましょう。employeeSearch.htmlを右クリックして、コード自動生成を選びます。出てくるダイアログで幾つかオプションを指定します。

  • 関連するEntityには、Employeeを指定します。
  • 自動生成タイプには、検索条件入力画面を指定します。
    • この自動生成タイプは、ユーザが追加することもカスタマイズすることもできます。

自動生成のボタンをクリックしてソースを作成します。できたソースを見てみましょう。

EmployeeSearchPage.java

HTMLのファイル名の最初を大文字にし、Pageをsuffixにつけたクラスが自動生成されます。ソースは次のようになります。Java5と1.4の環境では、吐き出されるソースコードが異なります。今回は、Java5の例です。

public class EmployeeSearchPage {
//@Navigation(to=)
public static final String SUCCESS = "success";

private String name;
//@SelectOneMenu(label="*Name")
private int departmentId;
private List departmentIdItems;
private DepartmentLogic departmentLogic;
private EmployeeSearchDxo dxo;

...
public String initialize() {
//TODO
departmentIdItems = departmentLogic.findAll();
return null;
}

public String doFindEmployee() {
//TODO
return SUCCESS;
}
}

nameプロパティは、HTMLのid属性から来ています。
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()の記述からです。