Scala+Liftによる実践Webアプリケーション開発(2)
WINGSプロジェクト 尾崎 智仁 [著] 山田 祥寛 [監修] 2009/11/16 14:00

サンプルファイル 15.60 KB

 前回は、関数型Webアプリケーションフレームワークというコンセプトで構築された、ScalaのWebアプリケーションフレームワーク「Lift」の概要を紹介しました。第2回となる本稿では、LiftにおけるView層であるテンプレート、Snippetについてサンプルを用いて解説したいと思います。

1 2 3 4 5 →

はじめに

 前回は、関数型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の関係を表したものです。

図1:テンプレートと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を呼び出しています。

[リスト1]Formを生成するテンプレートの例
<!-- 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関数が呼び出されます。

[リスト2]Snippetのタグ
<lift:"Snippetクラス名"."Snippetの関数名">
 ...
</lift:"Snippetクラス名"."Snippetの関数名">
(3)<lift:"Snippetクラス名" />

 名前空間をliftにして、「Snippetクラス名」を指定すると、指定したSnippetクラスのrender関数が呼び出されます。

例:
<lift:SampleSnipet />

1 2 3 4 5
→
INDEX
Scala+LiftフレームワークのView/Template
Page1
はじめに
対象読者
必要な環境
LiftのViewはSnippet+Template
フォームを作成する
Function Mappingについて
まとめ
参考資料
プロフィール
WINGSプロジェクト 尾崎 智仁 オザキ トモヒト

WINGSプロジェクトについて>
有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2011年7月時点での登録メンバは36名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。


プロフィール
山田 祥寛 ヤマダ ヨシヒロ

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。
主な著書に「入門シリーズ(サーバサイドAjax/XMLDB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト