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


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

Web Page を作る

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

下準備

kotlinx.html, PostgreSQL を使用するために、 build.gradle を更新します。 dependencies に2行追加します。

データベースの接続設定も必要ですので、 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 は完成です。

kotlinx.html では、 HTMLタグと同じ名前のファンクションが用意されています。 それらは Higher-Order Function (高階関数) で、最後の引数が関数になっています。 多くはラムダを使うのですが、そのラムダの中でタグの属性を設定します。 ほとんどの属性は 属性 = 文字列 の形で設定できるようになっていますが、 予め用意されていない属性や "data-xxx" のような独自の属性を設定するときは attributes を使用します。 また、多くのタグで、 div("form-group") のようにタグの引数(ここでは "form-group")を利用してCSSクラスを設定できます。

独自の属性設定

kotlinx.html には div のようにタグ名そのままのファンクションだけでなく、 postFormtextInput のように少しカスタマイズされたファンクションも用意されています。

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

コントローラ作成

シンプルに追加と表示のみを考えます。

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

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

View を見やすくする

TaskView の中身を少し見やすくしてみます。 bootstrap では <div class="row"> が頻出しますので、ひとつのメソッドにしておけると楽です。 そこで、Tag.kt を作成して、Viewでよく使うメソッドを記述しておきます。

こちらはクラスでもオブジェクトでもなく、直接 Kotlin のファンクションが記載されたファイルです。

これを TaskView で次のようにしてインポートします。

すると、 div("row") と書いていたのを row で簡略化して書けるようになります。

Kotlin 1.1.61 + Spring で Web Application を作る (3 of 4) に続きます。