前々回に作成したHelloResourceでは、Cozy Webでモデル定義をすることでWeb上のリソースとしてアクセスすることができることを説明しました。
前回はデモモードを使って、デモ時のみメモリDBにデータ投入する方法を紹介しました。
今回はHelloResourceを使って、モデルで定義したリソースをデザイン化した画面で表示する方法を説明します。
HelloResource
前々回作成したHelloResourceにエンティティの情報を表示するビューを追加します。
HelloResourceではビューは定義されていないので、エンティティのデフォルトの表示画面で表示されます。これをデザイン化した表示画面にすることが目的です。
準備
cozyを起動するディレクトリのwebappsディレクトリに、アプリケーションのホームディレクトリとなるHelloResourceが作成されています。ここにビューを追加していきます。
モデル
WEB-INF/models/model.orgにアプリケーションで使用するモデルが定義されています。
* entity ** product *** features table=product *** attributes | Name | Type | Multiplicity | |-------+--------+--------------| | id | token | 1 | | name | string | 1 | | price | int | 1 |
エンティティproductを定義しています。
これがWebのリソースproductとなります。
ビュー
リソースproductの表示ビューとして以下のHTMLをプロジェクトルートにproduct.htmlとして配置します。
<html> <head> <title>Product List</title> </head> <body> <c:table /> </body> </html>
タグ c:table の場所にエンティティ一覧のモデルの内容が表示されます。それ以外の部分は通常のHTMLとして装飾できます。
また c:table の表示に関してもカスタマイズができますが、詳細は今後取り上げていく予定です。
product.htmlの代わりにproduct.jadeとして以下のJadeファイルを配置しても同じ振る舞いになります。
html head title Product List body c:table
実行
それではHelloResourceを実行してみましょう。
モデルとして定義したリソースのproductの一覧取得は以下になります。
WebアプリケーションのURL http://localhost:8080/web/HelloResource の直下にリソース名productを指定しています。
$ curl http://localhost:8080/web/HelloResource/product
この結果、以下のHTML文書が返されます。(読みやすいようにxmllintで整形しています。)
<?xml version="1.0"?> <!DOCTYPE html> <html> <head> <title>Product List</title> </head> <body> <table class=""> <caption class="">product</caption> <thead class=""> <tr class=""> <th scope="col" class="">Id</th> <th scope="col" class="">Name</th> <th scope="col" class="">Price</th> </tr> </thead> <tbody class=""> <tr data-href="product/1.html"> <td class="">1</td> <td class="">Apple</td> <td class="">300</td> </tr> <tr data-href="product/2.html"> <td class="">2</td> <td class="">Orange</td> <td class="">350</td> </tr> <tr data-href="product/3.html"> <td class="">3</td> <td class="">Peach</td> <td class="">400</td> </tr> </tbody> </table> </body> </html>
今回データとして投入した4つのエンティティに対応する情報が表示されています。
詳細表示
次はエンティティの詳細表示ビューです。
ビュー
リソースproductの詳細表示を行うビューとして以下のHTMLを用意します。
<html> <head> <title>Product Detail</title> </head> <body> <c:detail /> </body> </html>
タグ c:detail がエンティティの詳細表示を行うタグです。この場所にエンティティの詳細情報が表示されます。それ以外の部分は通常のHTMLとして装飾できます。
また c:detail の表示に関してもカスタマイズができますが、詳細は今後取り上げていく予定です。
このHTMLファイルをプロジェクトルート配下のproduct.entityディレクトリ配下に配置します。
product.entityディレクトリはリソースproductに対してエンティティ操作のシナリオに対するビューを格納するためのディレクトリです。サフィックスのentityが「エンティティ操作のシナリオに対するビュー」を示しています。
この配置を行うことにより「product/3」といったリソースproductのID 3のエンティティに対する表示のためのビューとして利用されます。
実行
それではHelloResourceを実行してみましょう。
$ curl http://localhost:8080/web/HelloResource/product/4
この結果、以下のHTML文書が返されます。(読みやすいようにxmllintで整形しています。)
<?xml version="1.0"?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="keywords" content="TBD"/> <meta name="description" content="TBD"/> <meta name="robots" content="noindex,nofollow"/> <meta name="author" content="TBD"/> <title>Product Detail</title> </head> <body> <table class=""> <tbody> <tr class=""> <th scope="row" class="">Id</th> <td class="">4</td> </tr> <tr class=""> <th scope="row" class="">Name</th> <td class="">Berry</td> </tr> <tr class=""> <th scope="row" class="">Price</th> <td class="">450</td> </tr> </tbody> </table> </body> </html>
まとめ
今回はモデルとして定義されたエンティティをリソースとして操作する際に、参照ビューを定義する方法について説明しました。
次回はエンティティ・リソースの更新についてみていきます。
諸元
- Cozy
- 0.0.12
0 件のコメント:
コメントを投稿