Build Web Application with Kotlin 1.2.0 and Spring (2 of 4)


Kotlin 1.2.0 + Spring で Web Application を作る (1 of 4) の続きです。

Create Web Page

Task (作業) の登録・一覧表示ができるようにします。

Preparqtion

To use kotlinx.html and PostgreSQL, update build.gradle.

Database configuration is required, so create resources/application.properties.

Then, create table with SQL, which is used in this application.

Create Entity

Create Spring Entity and Repository classes. We don’t write Getter or Setter.

To get data from the DB, also create Repository interface.

Entity で @CreatedDate, @LastModifiedDate を使用しますので、Application クラス に @EnableJpaAuditing を付け加えておきます。

Create View

View 部分を作ります。 共通レイアウトと内部のコンテンツに分けて、オブジェクトとして作ります。

At first, common layout as LayoutView.

default method builds layout structure. Being written in Kotlin, if you miss tag, IDE tells, you can write if and when in Kotlin grammar. Here, I added bootstrap stylesheet into header tag. meta tag is extracted as another function, metaTags.

Create view to list Task items.

Taskの一覧と、Taskを追加するフォームのみ表示しています。 これで View は完成です。

Method orEmpty is the String? method. When the value is null, it returns blank string, "". You can write like the following.

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がそのままレスポンスとして返されます。

Then we can create new task and list tasks. Launch the server with ./gradlew bootrun and access to localhost:8080, then the following page appears.

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