ポートレット

ポートレット

Liferay DXPは、 ポートレット と呼ばれるJavaベースのWebアプリケーションのポータルサーバーとして始まりました( JSR 168JSR-286 、および JSR-362 を参照)。 ポートレットは、他のWebアプリケーションと同様に、リクエストを処理して応答を生成します。 しかし、ポートレットと他のWebアプリの大きな違いの1つは、ポートレットがWebページの一部で実行されることです。 ポートレットアプリケーションを作成するときは、そのアプリケーションについてのみ考慮する必要があります。ページの残りの部分(ナビゲーション、トップバナー、インターフェイスのその他のグローバルコンポーネント)は、他のコンポーネントによって処理されます。 ポートレットはポータルサーバーでのみ実行されます。 ポートレットは、ユーザー管理、認証、権限、ページ管理などのポータルの既存のサポートを使用します。 これにより、ポートレットのコア機能の開発に集中できます。 多くの点で、アプリケーションをポートレットとして作成する方が、スタンドアロンアプリケーションを作成するよりも簡単です。

多くのポートレットは、ユーザー(権限がある場合)またはポータル管理者が1つのページに配置できます。 たとえば、あるページには、コミュニティイベント用のカレンダーポートレット、重要なお知らせ用のお知らせポートレット、およびコミュニティに関心のあるリンク用のブックマークポートレットを含めることができます。 ポートレットコードを変更せずに、ドラッグアンドドロップでページ上のポートレットの位置とサイズを変更できます。 フォーラムやWikiのような単一のポートレットは、そのページで必要な唯一のアプリであれば、ページ全体を占めることができます。 つまり、ポートレットは、JavaベースのWebアプリの開発に関連する従来の多くの問題点を軽減します。

複数のポートレットを1つのページに配置できます。

ポートレットのフェーズ

ポートレットは、複数のフェーズでリクエストを処理します。 これにより、ポートレットはサーブレットよりもはるかに柔軟になります。 各ポートレットのフェーズは、異なる操作を実行します。

レンダリング: 現在の状態に基づいてポートレットのコンテンツを生成します。 このフェーズが1つのポートレットで実行されると、ページ上の他のすべてのポートレットでも実行されます。 レンダリングフェーズは、ページ上の任意のポートレットがアクションフェーズまたはイベントフェーズを完了した後に実行されます。

アクション: ユーザーアクションに応答して、アクションフェーズはポートレットの状態を変更する操作を実行します。 アクションフェーズでは、イベントフェーズで処理されるイベントをトリガーすることもできます。 アクションフェーズとオプションのイベントフェーズの後に、レンダリングフェーズがポートレットのコンテンツを再生成します。

イベント: アクションフェーズでトリガーされたイベントを処理します。 イベントは、ポートレット間通信(IPC)に使用されます。 ポートレットがすべてのイベントを処理すると、ポータルはページ上のすべてのポートレットでレンダリングフェーズを呼び出します。

リソース提供: ライフサイクルの残りの部分から独立してリソースを提供し、ページ上のすべてのポートレットでレンダリングフェーズを実行せずに、ポートレットが動的コンテンツを提供できるようにします。 リソース提供フェーズはAJAXリクエストを処理します。

ヘッダ: レンダリングフェーズの前に、CSSなどのリソースの依存関係を指定できます。

ポートレットモード

ポートレットは、異なるモードとウィンドウ状態を持つという点でもサーブレットとは異なります。 モード名でポートレットの現在の機能を識別しますが、最近のほとんどのアプリケーションは閲覧モードのみを使用しています。

閲覧モード: 主な機能が実装されているポートレットのデフォルトモード。

編集モード: ポートレットの設定モード。 たとえば、天気ポートレットは、編集モードを使用して天気レポートの場所を定義できます。

ヘルプモード: ヘルプ情報またはドキュメンテーションを表示するためのモード。

ポートレットウィンドウの状態は、ポートレットがページ上で占めるスペースの量を制御します。 ウィンドウの状態は、従来のデスクトップ環境のウィンドウの動作を模倣しています。

Normal: ポートレットは、他のポートレットを含むページに配置できます。 これはデフォルトのウィンドウ状態です。

最大化: ポートレットがページ全体を占めます。

最小化: ポートレットのタイトルバーのみが表示されます。

サーブレットとのその他の違い

ポートレットはページの一部をレンダリングするだけなので、 <html><head><body> などのグローバルタグは使用できません。 また、ポートレットのページが事前にわからないため、ポートレットのURLを直接作成することはできません。 代わりに、ポートレットAPIには、プログラムでポートレットURLを作成するためのメソッドが含まれています。 また、ポートレットはjavax.servlet.ServletRequestに直接アクセスできないため、URLから直接クエリパラメーターを読み取ることはできません。 代わりに、ポートレットはjavax.portlet.PortletRequestオブジェクトにアクセスします。 ポートレット仕様では、ポートレットがそれ自体のURLパラメーターまたはパブリックレンダーパラメータとして宣言されたパラメーターのみを読み取るためのメカニズムが提供されています。 ただし、Liferay DXPは、 ServletRequest およびクエリパラメーターにアクセスできるユーティリティメソッドを提供しています。 また、ポートレットには、ポートレットのライフサイクルの各フェーズで利用可能な ポートレットフィルター もあります。 ポートレットフィルターは、リクエストと応答をその場で変更できるという点でサーブレットフィルターに似ています。

Liferay DXPでWebフロントエンドを開発するすべての方法には、ポートレットが含まれます。 JavaScriptベースのウィジェットにはLiferayのJS Portlet Extenderが使用されており、JavaベースのWebフロントエンドは明示的にポートレットです。 Webフロントエンドの各タイプは、ポートレット3.0、依存関係の挿入(DI)、モデルビューコントローラー(MVC)、およびモジュール性のサポートが異なり、ポートレットを開発するための優れたオプションを多数提供します。

以下では、ポートレットの開発を始めるための方法を紹介します。