フォーム利用MyvaadinApplicationクラス
最後に、Formを利用してフォームを作成します。MyvaadinApplicationクラスを次のように修正してください。これで完成です。
package com.example.myvaadin;
import com.vaadin.Application;
import com.vaadin.data.Property;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.data.util.BeanItem;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
public class MyvaadinApplication extends Application {
Window mainWindow = null;
BeanItem<MyFormData> item = null;
Form form = null;
@Override
public void init() {
mainWindow = new Window("Myvaadin Application");
setMainWindow(mainWindow);
VerticalLayout layout = (VerticalLayout) mainWindow.getContent();
layout.setMargin(true);
layout.setSpacing(true);
form = createForm();
layout.addComponent(form);
Button btn = new Button("OK");
btn.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
try {
form.commit();
} catch(InvalidValueException e){
e.printStackTrace();
return;
}
String msg = "";
Property p = item.getItemProperty("name");
msg += "<h2>" + (String)p.getValue() + "</h2>";
p = item.getItemProperty("mail");
msg += "<p>" + (String)p.getValue() + "</p>";
p = item.getItemProperty("comment");
msg += "<p>" + (String)p.getValue() + "</p>";
mainWindow.showNotification(msg);
}
});
layout.addComponent(btn);
}
Form createForm(){
Form form = new Form();
form.setFormFieldFactory(new MyFormFieldFactory());
form.setWriteThrough(false);
form.setInvalidCommitted(false);
item = new BeanItem<MyFormData>(new MyFormData());
form.setItemDataSource(item);
String[] proplist = new String[]{"name","pass","mail","comment"};
form.setVisibleItemProperties(proplist);
return form;
}
}


アクセスすると、「名前」「パスワード」「メール」「メモ」といった項目のフォームが表示されます。適当に入力してボタンを押すと、値をチェックし、指定した条件を満たすかどうかを調べます。条件を満たしていない場合には、フォームの下にエラーメッセージが表示されます。すべての条件を満たしていると、画面に入力フォームの内容を表示します。
ここではcreateFormで新たにFormを作成し、「setFormFieldFactory」でMyFormFieldFactoryをFormのファクトリーに設定しています。また「setItemDataSource」でフォームのデータソースとしてMyFormDataを保管したBeanItemインスタンスを設定しています。このようにファクトリーの設定、データソースの設定の2つをきっちりと行うことにより、Formは自分自身でデータを管理できるようになるのです。
ちなみに、フォームのデータを取得する場合は、BeanItemの「getItemProperty」メソッドを使います。引数に取得したい項目名を指定して呼び出すことで、その値を取り出すことができます。
