環境
OS X Yosemite 10.10.3
jdk1.8.0_45.jdk
MySQL Server version: 5.5.28 Source distribution
Spring Tool Suite
Version: 3.6.4.RELEASE
Build Id: 201503100337
Platform: Eclipse Kepler SR2 (4.3.2)
Gradle IDE plugin Version: 3.6.4.201503050952-RELEASE
Groovy-Eclipse plugin Version: 2.9.2.xx-201502282108-e43j8
前提条件
下の状態から、
Groovyを使ったSpring Boot, Data JPA, MySQL操作の簡単な実装
http://qiita.com/quwahara/items/f4b1d30855fff83da3b8
https://github.com/quwahara/GP/tree/spring-jpa-groovy
余計なものを整理した下の状態に、Thymeleafの実装を加えます。
主な変更点として
Controllerとmainメソッドが一緒が嫌だったので、SampleController.groovyを削除して、mainメソッドのみのApplication.groovyを代わりに加えました。
package hello;
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.context.annotation.ComponentScan
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Thymeleafの依存をbuild.gradleに設定する
前提条件のbuild.gradleに// Addを追記
// 省略
dependencies {
compile 'mysql:mysql-connector-java'
compile 'org.codehaus.groovy:groovy-all'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
// Add
compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
compile 'org.springframework.boot:spring-boot-starter-web'
}
// 省略
Package ExplorerでProjectのRoot要素を右クリック、Gradle → Refresh All
Template(View)を追加
src/main/resources/templatesディレクトリを作成します。
注意としてそれがないと、起動がエラーになります。
そのディレクトリ下にmemo_one.htmlを作ります。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<title>memo one</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div th:if="${memo}" th:object="${memo}">
<div th:text="*{text}"></div>
<div th:text="*{creationDate}"></div>
</div>
<div th:unless="${memo}">
<div>No memo</div>
</div>
</body>
</html>
Controllerを追加
package hello.controller
import hello.domain.Memo
import hello.service.MemoRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Controller
// Add
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
// Add
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.ResponseBody
@Controller
class MemoController {
// 省略
// Add
@RequestMapping(value="/memo/one", method=RequestMethod.GET)
String one(Model model) {
model.addAttribute("memo", memoRepository.findOne(1L))
return "memo_one"
}
}
application.propertiesにThyemeleafのcache無効化を設定
開発中はReloadする度に、htmlが更新された方が嬉しいので無効にします。
# 省略
# Add
# THYMELEAF (ThymeleafAutoConfiguration)
spring.thymeleaf.cache=false
アプリケーションを実行
Package Explorerでhello/Application.groovyを選択、右クリック
Debug As → Spring Boot App
ブラウザで下のURLを開く
http://localhost:8080/memo/new?text=one
http://localhost:8080/memo/one