ダウンロード サンプルファイル (15.2 KB)
前回は、関数型Webアプリケーションフレームワークというコンセプトで構築された、ScalaのWebアプリケーションフレームワーク「Lift」の概要を紹介しました。第2回となる本稿では、LiftにおけるView層であるテンプレート、Snippetについてサンプルを用いて解説したいと思います。
はじめに
前回は、関数型Webアプリケーションフレームワークというコンセプトで構築された、ScalaのWebアプリケーションフレームワーク「Lift」の概要を紹介しました。
第2回となる本稿では、LiftにおけるView層であるテンプレート、Snippetについてサンプルを用いて解説したいと思います。
対象読者
- Javaは知っているが、Scalaも学んでみたいと思っている方
- ScalaでのWebアプリケーション開発に興味がある方
必要な環境
最低動作環境
- J2SE 5.0 JDK
推奨環境
- J2SE 6.0 JDK
- Apache Maven 2.10
- Scala 2.7.5
LiftのViewはSnippet+Template
LiftのView層は、基本的にテンプレートとSnippetによって構成されています。開発者は、HTMLページのテンプレートを用意し、動的な出力を行う部分をSnippetとして切り出すことで、処理とレイアウトを分離できます。
図1は、テンプレートとSnippetの関係を表したものです。
テンプレートとSnippetはXMLタグで結びつき、Snippetはテンプレートの内容を動的な出力で置き換えます。ただ、これだけではJSPのカスタムタグと同じではないかと、思われる方もいらっしゃるかもしれません。LiftのテンプレートとSnippetは、Scalaの言語仕様を生かして、JSPカスタムタグよりはるかに柔軟で簡単に記述することができます。また、本稿の後半で説明する、Function Mapping(動的なイベント処理)という機能を利用して、ブラウザ上で発生したイベントをダイレクトにScalaで記述された関数で処理されることができます。
以下、テンプレートとSnippetについて解説します。
テンプレート(XHTML)
ブラウザへの出力を生成するための、XHTML形式のテンプレートファイルです。従来のMVC型のWebアプリケーションフレームワークと異なり、Liftではテンプレートをレンダリングする過程で、テンプレート内に記述されたSnippetを呼び出すことで動的な出力を生成します。
テンプレートファイルの拡張子は「.html」で、プロジェクトディレクトリの「src/main/webApp」以下に配置します。
テンプレート内では、Snippetによって動的な出力を生成したい箇所をXMLタグで指定します。Snippetには、Liftに標準で組み込まれているビルトインSnippetと、開発者が作成するSnippetの2種類があります。ビルトインSnippetは、レイアウトの指定、メニューの自動生成やエラーメッセージの表示、CSSの読み込みなどよく利用する処理があらかじめ用意されています。
リスト1は、Formを生成するテンプレートの例です。例では、ビルトインSnippetである<lift:surround>タグでレイアウトを指定し、<lift:SampleSnipet.hello>タグで独自に用意したSnippetを呼び出しています。
<!-- lift:surroundタグはレイアウトを指定する -->
<lift:surround with="default" at="content"> *4
<h2>Sampleのフォーム</h2>
<!-- Snippetの指定 lift:"Snippetクラス名"."Snippetの関数名" -->
<lift:SampleSnipet.hello form="POST"> *1
<greeting:name/> *2
<br/>
<greeting:submit/> *3
</lift:SampleSnipet.hello>
</lift:surround>
Snippetの指定方法
リスト1中の*1の部分が、Snippetを指定するタグです。Snippetを指定するタグは、以下の3つの指定方法があります。
(1)<lift:snippet type="Snippetクラス名:Snippetの関数名">
<lift:snippet>タグの属性「type」に、「Snippetクラス名:Snippetの関数名」を指定します。
<lift:snippet type="SampleSnipet:hello"/>
(2)<lift:"Snippetクラス名"."Snippetの関数名"/>
名前空間をliftにして、「Snippetクラス名」.「Snippetの関数名」を指定します。リスト2のような書式になります。*1の例ですと、SampleSnippetクラスのhello関数が呼び出されます。
<lift:"Snippetクラス名"."Snippetの関数名"> ... </lift:"Snippetクラス名"."Snippetの関数名">
(3)<lift:"Snippetクラス名" />
名前空間をliftにして、「Snippetクラス名」を指定すると、指定したSnippetクラスのrender関数が呼び出されます。
<lift:SampleSnipet />
この記事は参考になりましたか?
- Scala+Liftによる実践Webアプリケーション開発連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 尾崎 智仁(オザキ トモヒト)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア

