ZKとは
ZKは、
Javaで開発されたオープンソースの
Ajax Webアプリケーションフレームワークです。このフレームワークの特徴は、
JavaScriptの専門知識がなくても、リッチなWebアプリケーションのGUIを構築できる点にあります。ZKの中核をなすのは、
Ajaxベースのイベント駆動メカニズムです。120以上の
XULコンポーネントと80以上のXHTMLコンポーネント、そしてユーザーインターフェース設計のためのマークアップ言語を備えています。
ZKの仕組み
ZKは、高機能な
XUL/XHTMLコンポーネントを使用してWebページを設計し、エンドユーザーの操作によって発生するイベントに基づいてこれらのコンポーネントを操作します。このモデルは、デスクトップアプリケーションのGUIプログラミングに非常によく似ています。ZKは「サーバ中心型」のアプローチを採用しており、コンポーネント間の同期やクライアントとサーバ間のイベントパイプラインはエンジン部が自動的に処理します。これにより、
Ajax関連のコードはアプリケーション開発者には完全に透過的です。エンドユーザーにはデスクトップアプリケーションのようなスムーズな操作性を提供し、開発者にはデスクトップアプリケーション開発と同様のシンプルさを維持します。
主な特徴
宣言的なUI記述: HTMLよりも高度な抽象レベルでリッチなUIを宣言的に記述できます。例えば、
XULウィジェットセットには、ツリー、コンボボックス、バンドボックス、スライダーなどが含まれます。
Javaスクリプト統合:
Javaへのスクリプト埋め込みをサポートしており、UIとバックエンドのプログラミングを同じ言語で統合できます。また、
JavaScript(
Rhino)、
Ruby(
JRuby)、
Python(
Jython)、Groovyなどの他のサーバサイド
Javaスクリプトもオプションで利用可能です。
高度なAjaxサポート: ユーザーのブラウザからの入力は
Ajaxを通じてサーバ側のデスクトップモデルに送られます。このプロセスは透過的に処理されます。
イベント駆動型コンポーネントモデル: デスクトッププログラミングモデルと類似した、イベント駆動型のコンポーネントベースのモデルを採用しています。
多様なUI生成パターン: MVCプログラミングを採用した場合、すべてのイベントは中央のコントローラクラスに転送されます。また、zscriptを使用してページ内にイベントハンドラを定義することも可能です。前者は
Swingに、後者はDHTMLに近いアプローチです。
既存Webフレームワークとの連携: JSPカスタムタグライブラリ、JSFサポート、サーブレットフィルタにより、既存のWebフレームワークとの統合が可能です。Springや
Hibernateもサポートしています。
UIコンポーネントの拡張性: 新しいUIコンポーネントを作成して拡張したり、コントロールのグループをマクロコンポーネントとして再利用したりできます。
データバインディング: ページ内
アノテーションによるデータバインディング機能を備えており、画面上のコントロールとサーバ上のPOJO(Plain Old
Java Object)のフィールドを透過的にバインドできます。
ZKはサーバサイドでHTMLを生成するフレームワークであり、クライアント側に
Geckoを必要としません。そのため、任意のブラウザで機能します。ZKはZUML(ZK User Interface Markup Language)で記述されたサーバサイドのページを入力とし、ブラウザにはDHTMLを出力します。ZKでは、UIロジックはサーバ上の
Java環境で実行されるため、多様なスクリプトエンジンやアプリケーションライブラリを利用できます。プレゼンテーションはDHTMLによってクライアント側で実行され、サーバ側の負荷を軽減します。
ZKと
XULはコンポーネントの一部が重複していますが、ZKには独自のコンポーネントもあります。コンポーネントライブラリは拡張可能で、コンポーネントを組み合わせたマクロコンポーネントを定義できます。UIコンポーネントとサーバサイドのデータを宣言的にバインドすることで、サーバサイドのデータバインディングを提供します。また、ルックアンドフィールも異なります。
システム要件
JRE version 5以降
Servlet 2.3以降をサポートするWebサーバ
必要なプログラミングスキル
必須:
Javaまたは
Javaスクリプトエンジン言語(Groovy、
Rhino、
JRuby、
Jython)の基本的な知識
HTMLと
XULの基本的な知識
任意:
サーバ上で動作するグルーロジックを書くためのスクリプト言語の知識(
BeanShell、
JavaScript、Groovy、
Ruby、
Pythonなど)
オブジェクト指向プログラミングの知識(AWT/
Swingスタイルのプログラミング、
JavaでのカスタムUIコントローラクラスの作成に役立つ)
Servletプログラミング
Ajaxの知識(ZKは
Ajaxを基盤としているが、ユーザー入力は自動的に
Javaのイベントに変換されるため、基本的にはブラウザでの動作を意識する必要はない)
クライアント側の
JavaScript(コンポーネントのクライアント側アクションをDHTMLロジックで実行することも可能だが、多くの場合不要)
宣言的データバインディング(UIコントロールをPOJO
Java Beansにバインド可能)
EL言語(JSTLスタイルのELをサポート)
ZUML
ZUML(ZK User Interface Markup Language)は、リッチなUI定義のためのマークアップ言語です。プログラマでない開発者でも直感的にUIを設計できるように意図されています。ZUMLは、他のマークアップ言語(
Mozilla XUL、XHTMLなど)と同じページ内でシームレスに混合して記述できます。また、
Java言語にスクリプトを埋め込んだり、EL式を使用してコンポーネントやアクセスデータを操作したりできます。
バージョンアップによる仕様強化
バージョン5.0: jQuery(
JavaScriptライブラリ)の積極的な利用を推奨し、サーバ中心型だけでなく、サーバ/クライアント融合型の開発手法も可能になりました。
バージョン6.0: データバインディングシステム「ZK Databinding2」が導入され、MVVM(Model-View-ViewModel)デザインパターンがサポートされました。また、ジェネリックスを使用した型安全なコードの記述や、サーブレット3でのComet非同期通信のサポート、ZULページ内でのテンプレート作成機能などが追加されました。
バージョン6.5.0: デスクトップとタブレットのUIおよびタッチエクスペリエンスを、単一のコードベースとコンポーネントセットで融合し、デバイスの透過性を実現しました。