前回に続き、JPAで取得したデータをグリットで表示する簡単なサンプル。
面倒くさいので Groovy で書くことにする。
依存の追加
build.gradle にJPA関連の依存を追加する。
buildscript { repositories { jcenter() } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.3.1.RELEASE' } } apply plugin: 'java' apply plugin: 'groovy' apply plugin: 'idea' apply plugin: 'spring-boot' repositories { jcenter() } sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.5' compile 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'com.vaadin:vaadin-spring-boot-starter:1.0.0' compile 'com.h2database:h2:1.4.190' testCompile 'org.springframework.boot:spring-boot-starter-test' }
前回からの変更は、groovy プラグイン入れたのと、groovy-all
と spring-boot-starter-data-jpa
と h2
を依存に追加しただけ。
Entityの作成
src/main/groovy/hello/Customer.groovy
package hello import javax.persistence.Entity import javax.persistence.GeneratedValue import javax.persistence.Id @Entity @groovy.transform.TupleConstructor(excludes="id") class Customer { @Id @GeneratedValue Long id String firstName String lastName }
簡単な Customer Entity。
@TupleConstructor
で定義順のコンストラクタの生成を Groovy の AST変換で行う。
id は自動採番なので除外。
Repository の作成
src/main/groovy/hello/CustomerRepository.groovy
package hello import org.springframework.data.repository.CrudRepository interface CustomerRepository extends CrudRepository<Customer, Long> { }
インターフェース定義しとけば SpringData がよろしくやってくれるのでこれだけ。
Application クラスの変更
src/main/groovy/hello/Application.groovy
package hello import com.google.gwt.thirdparty.guava.common.collect.Lists import com.vaadin.annotations.Theme import com.vaadin.data.util.BeanItemContainer import com.vaadin.server.VaadinRequest import com.vaadin.spring.annotation.SpringUI import com.vaadin.ui.Grid import com.vaadin.ui.Notification import com.vaadin.ui.UI import com.vaadin.ui.VerticalLayout import groovy.transform.CompileStatic import org.springframework.beans.factory.annotation.Autowired @SpringUI @Theme("valo") class VaadinUI extends UI { @Autowired CustomerRepository repo; @Override @CompileStatic protected void init(VaadinRequest request) { VerticalLayout content = new VerticalLayout() content.setMargin(true) setContent(content) Grid grid = new Grid(new BeanItemContainer(Customer.class, Lists.newArrayList(repo.findAll()))) grid.setColumnOrder("id", "firstName", "lastName") grid.removeColumn("metaClass") grid.addSelectionListener({selectionEvent -> def selectionModel = grid.getSelectionModel() as Grid.SingleSelectionModel if (selectionModel.getSelectedRow() == null) return Notification.show("Selected : " + grid.getContainerDataSource().getItem(selectionModel.getSelectedRow()).getItemProperty("firstName"), Notification.Type.TRAY_NOTIFICATION) }); content.addComponent(grid) } }
VerticalLayout
でレイアウトコンテナを定義して、その中に Grid
コンポーネントを追加している。
Grid
には リポジトリから取得したデータを BeanItemContainer
で追加。この時、Groovy が Customer クラスに metaClass
プロパティを追加するので、Grid に表示しないように削除。
Grid の選択時のリスナを登録して選択項目を Notification
で表示。
実行
$ ./gradlew bootRun
レコード選択時。
今回はここまで。
Spring Boot Cookbook (English Edition)
- 作者:Alex Antonov
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/09/28
- メディア: Kindle版
Vaadin 7 Cookbook (English Edition)
- 作者:Jaroslav Holan,Ondrej Kvasnovsky
- 出版社/メーカー: Packt Publishing
- 発売日: 2013/04/25
- メディア: Kindle版