読者です 読者をやめる 読者になる 読者になる

kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

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