Kotlin 1.2.0 + Spring で Web Application を作る (2 of 4)


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 のようにタグ名そのままのファンクションだけでなく、 postFormtextInput のように少しカスタマイズされたファンクションも用意されています。

Spring Security の CSRFトークンを form に加えたり、 DELETE, PATCH などのリクエストを送信する場合は次のようにします。

コントローラ作成

追加と表示のみを考えます。

TaskView の list メソッドが、 String として HTML を返すものになっていますので、 listメソッドには @ResponseBody を付けています。 こうすることで、返り値のStringがそのままレスポンスとして返されます。

これで登録・一覧表示ができるようになりました。 ./gradlew bootrun でサーバを起動し、localhost:8080にアクセスすると下のように表示されます。

3つレコードを登録したところ

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) に続きます。