Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Scala+LiftフレームワークのView/Template

Scala+Liftによる実践Webアプリケーション開発(2)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/11/16 14:00

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

図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 />

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 尾崎 智仁(オザキ トモヒト)

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

バックナンバー

連載:Scala+Liftによる実践Webアプリケーション開発
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5