SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

 前回は、関数型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 />

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
Snippet

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4512 2009/11/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング