Table of Contents
Kotlin 1.2.0 + Spring で Web Application を作る (1 of 4) の続きです。
Web Page を作る
Task (作業) の登録・一覧表示ができるようにします。
下準備
kotlinx.html, PostgreSQL を使用するために、 build.gradle を更新します。
データベースの接続設定も必要ですので、 resources/application.properties
を作成します。
そして、今回使用するテーブルを SQL で作成しておきます。
Entity 作成
Spring の Entity とリポジトリクラスを作ります。 Kotlin らしく Getter, Setter は作りません。
データベースからデータを取得するため、 Repositoryインターフェースも作っておきます。
Entity で @CreatedDate
, @LastModifiedDate
を使用しますので、Application クラス に @EnableJpaAuditing
を付け加えておきます。
View 作成
View 部分を作ります。 共通レイアウトと内部のコンテンツに分けて、オブジェクトとして作ります。
まず共通レイアウトを LayoutView に記述します。
default メソッド がレイアウトの構造を表しています。 Kotlin で書いているので、 タグの閉じ忘れはエディタが教えてくれますし、 分岐の if
, when
は Kotlin と同じ文法で書くことができます。 ここではスタイルシートとして bootstrap を header タグ に入れています。 metaタグ を別のファンクション(metaTags)としてまとめています。
Task を一覧表示する View を作ります。
Taskの一覧と、Taskを追加するフォームのみ表示しています。 これで View は完成です。
メソッド orEmpty
は 型 String?
に用意されているメソッドで、 値が null
の場合に 空文字列(“”)を返すものです。 次のように書くこともできます。
kotlinx.html では、 HTMLタグと同じ名前のファンクションが用意されています。 それらは Higher-Order Function (高階関数) で、最後の引数が関数になっています。 多くはラムダを使い、そのラムダの中でタグの属性を設定します。 ほとんどの属性は 属性 = 文字列
の形で設定できるようになっていますが、 予め用意されていない属性や data-xxx
のような独自の属性を設定するときは attributes を使用します。 また、多くのタグで、 div("form-group")
のようにタグの引数(ここでは "form-group"
)を利用してCSSクラスを設定できます。
kotlinx.html には div
のようにタグ名そのままのファンクションだけでなく、 postForm
や textInput
のように少しカスタマイズされたファンクションも用意されています。
Spring Security の CSRFトークンを form に加えたり、 DELETE, PATCH などのリクエストを送信する場合は次のようにします。
コントローラ作成
追加と表示のみを考えます。
TaskView の list
メソッドが、 String
として HTML を返すものになっていますので、 list
メソッドには @ResponseBody
を付けています。 こうすることで、返り値のStringがそのままレスポンスとして返されます。
これで登録・一覧表示ができるようになりました。 ./gradlew bootrun
でサーバを起動し、localhost:8080
にアクセスすると下のように表示されます。

View を見やすくする
TaskView の中身を少し見やすくしてみます。 bootstrap では <div class="row">, <div class="col"> が頻出しますので、ひとつのメソッドにしておけると楽です。 そこで、
Tag.kt
を作成して、Viewでよく使うメソッドを記述しておきます。
こちらはクラスでもオブジェクトでもなく、直接 Kotlin のファンクションが記載されたファイルです。
これを TaskView で次のようにしてインポートします。
すると、 div("row")
, div("col")
と書いていたのを row
, col
で簡略化して書けるようになります。 メソッドの入力になりますので、タイプミスはIDEやコンパイラが教えてくれます。
Kotlin 1.2.0 + Spring で Web Application を作る (3 of 4) に続きます。
関連記事