ZK開発元 ⇒Potix
最新版8.5.0 / 2017年10月31日 (6年前) (2017-10-31)
リポジトリ
github.com/zkoss/zk
ZKは、Javaで書かれたオープンソースのAjaxWebアプリケーションフレームワークであり[1][2][3][4]、プログラミング知識がほとんどなくともJavaScriptを使うことなくウェブアプリケーションのリッチなGUIを作成できる。
ZKの中核はAjaxベースのイベント駆動機構であり、123以上のXULと83のXHTMLベースのコンポーネントから成り[5]、ユーザインタフェースを設計するためのマークアップ言語を備えている。高機能なXUL/XHTMLコンポーネントを使ってWebページを設計でき、エンドユーザーの活動を契機とするイベントによってそれらを操作できる。デスクトップのGUIアプリケーションのプログラミングモデルとよく似ている。
ZKの方式はサーバ中心型の手法と呼ばれ、コンポーネント間の同期やクライアント/サーバ間のイベントパイプラインはエンジン部が自動的に行い、Ajaxの組み立て用コードはアプリケーション開発者に対して完全に透過的である。したがって、エンドユーザーから見ればデスクトップアプリケーションのような操作性を提供し、一方で開発者にはデスクトップアプリケーションと同様の単純さを保持している。
Swingのようなコンポーネントベースのプログラミング作法に加え、ZKはリッチなユーザインタフェース定義のためのマークアップ言語ZUMLをサポートしている。
特徴
(単なるHTMLに比べて)リッチなユーザインタフェースを高い抽象レベルで宣言的に記述できる。例えばXULウィジェットセットには、ツリー、コンボボックス、バンドボックス、スライダーなどがある[6]。
Javaへのスクリプト埋め込みをサポート[7]。これにより、ユーザインタフェースとバックエンドのプログラミングを統一的に同じ言語で開発できる。オプションでその他のサーバサイドJavaスクリプトとしてJavaScript (Rhino)[8]、Ruby (JRuby)[9]、Python (Jython)[10]、Groovy[11]も使える。
高度なAjaxサポート。ユーザーのブラウザへの入力はAjax経由でサーバ側のデスクトップモデルに渡される。
イベント駆動コンポーネントベースモデル(デスクトッププログラミングモデルと類似)
いくつかのパターンでユーザインタフェースを生成できる。MVCプログラミングを採用した場合は、全てのイベントは中心となるコントローラクラスにフォワードされる[12]。それとは別に zscript を使ってページ内にイベントハンドラを定義できる[13]。前者はSwingに近く、後者はDHTMLに近い。
JSPカスタムタグライブラリ、JSFサポート、サーブレットフィルタにより、既存のWebプレームワークとの連携が可能。SpringやHibernateをサポート。
新たにUIコンポーネントを作成して拡張することができる。コントロールのグループをマクロコンポーネントとして再利用できる。
ページ内アノテーションによるデータバインディング機能。画面上のコントロールとサーバ上のPOJOのフィールドを透過的にバインドできる。
XULとの違い
ZKはサーバサイドでHTMLを生成するフレームワークであり、クライアント側にGeckoが存在する必要がないため、任意のブラウザで機能する。ZKはZUMLで書かれたサーバサイドのページを入力とし、ブラウザにはDHTMLを出力する。
ZKはユーザインタフェースのロジックをサーバ上のJava環境で実行する。このため、ロジック生成に様々なスクリプティングエンジンやアプリケーションライブラリを使える。プレゼンテーションはDHTMLによりクライアント側で実行され、サーバ側負荷を軽減している。アプリケーションを単一のアプリケーションコンテナで実行することで、DOMを多用してブラウザで実行させるよりもブラウザ間の互換性確認の手間が少なくて済む。
ZKとXULはコンポーネントが一部オーバーラップしているが、ZKには固有のコンポーネントもある。コンポーネントライブラリは拡張可能である。コンポーネントを組み合わせたマクロコンポーネントを定義できる。
UIコンポーネントとサーバサイドのデータを宣言的にバインドすることで、サーバサイドのデータバインドを提供する。
ルック・アンド・フィールが異なる。
システムの要求仕様
JRE version 5 かそれ以降
Servlet 2.3 かそれ以降をサポートするWebサーバ
必要なプログラミングスキル
必須
JavaまたはJavaスクリプティングエンジン言語(Groovy、Rhino、JRuby、Jython)に関する基本的知識が必要。