MVCの使用
経験豊富な開発者であれば、Model View Controllerについて聞いたのはこれが初めてではないでしょう。 JavaにはMVCフレームワークの実装がたくさんあるのに、Liferayがまた別のフレームワークを作成したのはなぜでしょうか。 Liferay MVCポートレットには次の利点があります。
- 他の多くのJava MVCフレームワークとは対照的に、軽量です。
- コードとの同期を維持する必要のある特別な構成ファイルはありません。
- これは
GenericPortletの拡張です。 - LiferayのMVCポートレットフレームワークは、
init()メソッドが呼び出されたときにいくつかの事前定義されたパラメーターのみを検索するため、大量の定型コードの記述を回避できます。 - コントローラーは MVC コマンド クラスに分割でき、各クラスは特定の ポートレット フェーズ (レンダリング、アクション、およびリソース提供フェーズ) のコントローラー コードを処理します。
- MVCコマンドクラスは複数のポートレットにサービスを提供できます。
- Liferayのポートレットはそれを使用します。 つまり、Liferayアプリケーションを設計またはトラブルシューティングする必要がある場合に参照する堅牢な実装がたくさんあります。
Liferay MVCポートレットフレームワークは軽量で使いやすいです。
ここでは、次のトピックを取り上げて、MVCポートレットがどのように機能するかを学習します。
Liferay MVCポートレットフレームワークの各レイヤーがアプリケーションの懸念事項の分離にどのように役立つかを検討してください。
MVCレイヤーとモジュール性
MVCには、3つのレイヤーがあります。
モデル: モデル層は、アプリケーションデータとそれを操作するためのロジックを保持します。
ビュー: ビュー レイヤーにはデータが表示されます。
コントローラー: MVCパターンの中間者であるコントローラーは、ビューレイヤーとモデルレイヤーの間でデータをやり取りします。
Liferay DXP のアプリケーションは、複数の個別の モジュールに分割されます。 サービスビルダーを使用すると、モデルレイヤーは サービス と API モジュールに生成されます。 ビューレイヤーとコントローラーレイヤーは、モジュールであるwebモジュールを共有します。
ワークスペース を使用して、マルチモジュール サービス ビルダー駆動型 MVC アプリケーション プロジェクト のスケルトンを生成すると、多くの時間を節約でき、より重要な (そして正直に言えば興味深い) 開発作業を開始できます。
Liferay MVCコマンドクラス
大規模なアプリケーションでは、すべてのコントローラーロジックを保持している場合、 -Portlet クラスは巨大で扱いにくいものになります。 Liferayは、コントローラー機能を分割するMVCコマンドクラスを提供します。
MVCActionCommand:-ActionCommandクラスを使用して、アクション URL によって呼び出される各ポートレット アクションを保持します。MVCRenderCommand:-RenderCommandクラスを使用して、レンダリング URL に応答して適切な JSP にディスパッチするレンダリングメソッドを保持します。MVCResourceCommand:-ResourceCommandクラスを使用して、リソース URL に基づいてリソースを提供します。
すべてをつなぎ合わせて適切に機能させるには、入り組んでいる構成ファイルが必要でしょうか。 いいえ、そうではありません。-Portletクラスの@Componentアノテーションですべて簡単に管理できます。
Liferay MVCポートレットコンポーネント
コントローラーを MVC コマンド クラスに分割する予定があるかどうかに関係なく、ポートレット @Component アノテーションによってポートレットが構成されます。 例として、簡単なポートレットコンポーネントを次に示します。
@Component(
property = {
"com.liferay.portlet.display-category=category.sample",
"javax.portlet.display-name=Hello World Portlet",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.name=com_acme_hello_world_web_internal_portlet_HelloWorldPortlet"
},
service = Portlet.class
)
public class HelloWorldPortlet extends MVCPortlet {
javax.portlet.nameプロパティは必須です。 MVCコマンドを使用する場合、javax.portlet.nameプロパティ値は、特定のポートレットURL /コマンドの組み合わせを正しいポートレットにリンクします。
[Liferay DXP が名前を使用して ポートレットの IDを作成する方法を考慮して、ポートレット名を一意にします。
コンポーネントを使用して公開している Portlet.class 実装の種類について、混乱が生じる可能性があります。 サービス レジストリでは、これが javax.portlet.Portlet インターフェイスであると想定されています。 たとえば、 com.liferay.portal.kernel.model.Portletではなく、それをインポートします。
liferay-portlet-app_[version].dtd ファイル は、ポートレット コンポーネントのプロパティとして指定できる Liferay 固有のすべての属性を定義します。 javax.portlet で名前空間化されたプロパティ。 これらは portlet.xml 記述子の要素です。
よりシンプルなMVCポートレット
より単純なアプリケーションでは、MVCコマンドを使用しません。 ポートレット レンダリング URL は、 mvcPath パラメータで JSP パスを指定し、 MVCPortlet メソッドは実装された制御ロジックをオーバーライドします。 次のJSPコードには、JSPパス/view_2.jspを指定するポートレットレンダーURLが含まれています。
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:renderURL var="view2URL">
<portlet:param name="mvcPath" value="/view_2.jsp" />
</portlet:renderURL>
<a href="<%= view2URL %>">Go to View 2</a>
ユーザーがリンクをクリックすると、ポートレットはmvcPathリクエストパラメータを受け取り、そのrenderメソッドで制御ロジックを処理します。 詳細については、 MVC ポートレットを使用したビューのレンダリング を参照してください。
次のステップ
これまで見てきたように、LiferayのMVCポートレットフレームワークは、適切に構造化されたコントローラーレイヤーを提供します。 MVCポートレットの基本を学びたい場合は、次のチュートリアルから始めてください。
個別のMVCコマンドクラスで制御ロジックを開発する場合は、次の記事をお読みください。
モデル レイヤーを開発する準備ができている場合は、 サービス ビルダーを参照してください。
関連トピック
- ポートレットのルック&フィール
- Using Localized Messages in an MVC Portlet
- Module Projects
- ワークスペース
- Fundamentals
- アーキテクチャ