Uruma コンボボックスに初期値を設定する
Urumaのサンプルプログラムuruma-example-employee-0.2.0.zipから、コンボボックスに初期値を設定する方法を知りました。
プルダウンに表示するリスト設定は、特に難しくなかったので説明を割愛します。リスト設定から初期値を指定する処理が悩んでしまったので、そこだけ以下に記述します。
関連するJavaファイルは3つで、処理のポイントは次のようになります。
Javaファイル | 概要 | 初期値設定のポイント |
---|---|---|
DepartmentDto.java | プルダウンに表示するIDと名称のペアを保持するDTOです。 | equalsメソッドをオーバーライドし、IDのみの比較で、一致/不一致を判断するようにします。 |
EmployeeEditForm.java | フォームクラスです。 | ExportSelectionアノテーションを使用して初期値指定用のDTO(DepartmentDto)を用意しておきます。 |
EditAction.java | アクションクラスです。 | フォームの初期値指定用DTO(DepartmentDto)に対して、IDに初期表示するIDを設定します。名称は未設定で問題ありません。 |
DepartmentDto.java
private int deptno; @BindingLabel private String dname;
@Override public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final DepartmentDto other = (DepartmentDto) obj; if (deptno != other.deptno) return false; return true; }
equalsメソッドをオーバーライドし、IDのみの比較で、一致/不一致を判断するようにします。名称を比較対象から外しているところがミソですね。
このメソッドの存在がなかなかわからなくて悩みました。
EmployeeEditForm.java
@ExportValue(id = "dept") private List<DepartmentDto> deptList; @ExportSelection(id = "dept") @ImportSelection(id = "dept") private DepartmentDto selectedDepartmentDto;
deptListはコンボボックスのプルダウンに表示するリストです。
selectedDepartmentDtoがプルダウンの初期値を指定する変数です。ExportSelectionアノテーションを付けて、初期値用として使う事を指定しておきます。
ExportValueとExportSelectionのID属性は、同じ値を指定します。
EditAction.java
@InitializeMethod public void initialize() { Employee employee = employeeLogic.getEmployee(selectedEmployees.get(0) .getEmpno()); employeeEditFormDxo.convert(employee, employeeEditForm); employeeEditForm.setDeptList(employeeLogic.getAllDepartments()); DepartmentDto selectedDepartment = new DepartmentDto(); selectedDepartment.setDeptno(employeeEditForm.getDeptno()); employeeEditForm.setSelectedDepartmentDto(selectedDepartment); }
フォームクラス(EmployeeEditForm)のdeptListにプルダウン表示するリストを設定しています。
次に、プルダウンの初期値selectedDepartmentDtoを設定しています。ここで、selectedDepartmentDtoには、ID(deptno)のみ設定し、名称は未設定のままです。
deptListに登録されているDtoのうち、selectedDepartmentDtoと一致するものが初期値表示されるようになりますが、このときの一致判定には、DepartmentDtoクラスでオーバーライドしたequalsメソッドが使われます。equalsメソッドはIDのみで比較するように記述しましたので、selectedDepartmentDtoのIDのみ設定すれば問題ないという事になっています。
以上でコンボボックスの初期値設定ができると理解しました。
動作確認環境
OS: Windows XP
Eclipse Version: 3.3
Java Version: 1.6
Uruma Version: 0.2