ポートレットプロバイダー
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
一部のアプリは、異なるエンティティタイプで同じ操作を実行します。 たとえば、Asset Publisherを使用すると、ユーザーはドキュメント、Webコンテンツ、ブログなどを含むアセットとしてさまざまなエンティティを参照、追加、プレビュー、表示できます。 エンティティはさまざまですが、運用と周囲のビジネスロジックは同じままです。 Asset Publisherなどのアプリは、Portlet Providersフレームワークに依存して、エンティティを操作するポートレットを取得します。 このようにして、フレームワークを使用すると、エンティティ操作に集中でき、それらの操作を実行するポートレットに関する心配から解放されます。 このチュートリアルでは、次の方法を説明します
PortletProvidersの作成
PortletProvider
s は、エンティティタイプに関連付けられたコンポーネントクラスです。 ポートレットIDとポートレットURLを返すメソッドがあります。 PortletProvider
登録したら、 PortletProviderUtil
クラスを呼び出して、対応する PortletProvider
からポートレットIDまたはポートレットURLを取得できます。
WikiPortletProvider
クラスを調べます。
@Component(
immediate = true,
property = {
"model.class.name=com.liferay.wiki.model.WikiPage",
"service.ranking:Integer=100"
},
service = {EditPortletProvider.class, ViewPortletProvider.class}
)
public class WikiPortletProvider
extends BasePortletProvider
implements EditPortletProvider, ViewPortletProvider {
@Override
public String getPortletName() {
return WikiPortletKeys.WIKI;
}
}
WikiPortletProvider
は BasePortletProvider
拡張し、 getPortletURL
メソッドを継承します。 ただし、ポートレットの名前 WikiPortletKeys.WIKI
を返す PortletProvider
の getPortletName
メソッドを実装する必要があります。
WikiPortletProvider
の @Component
アノテーションは、これらの要素とプロパティを指定します:
immediate = true
インストール時にすぐにコンポーネントをアクティブにします。"model.class.name = com.liferay.wiki.model.WikiPage"
は、ポートレットが動作するエンティティタイプを指定します。"service.ranking:Integer = 100"
は、コンポーネントのランクを100
に設定し、同じmodel.class.name
値を指定しているがランクが低いPortletProvider
すべて優先します。service = {EditPortletProvider.class, ViewPortletProvider.class}
は、このクラスが実装するサブインターフェースPortletProvider
クラスを反映します。
独自の PortletProvider
を作成する方法は次のとおりです。
-
モジュールに
PortletProvider
クラスを作成します。 推奨されるクラス命名規則を使用します。[Entity] + [Action] + PortletProvider
例:
LanguageEntryViewPortletProvider
-
getPortletURL
メソッド実装を使用する場合は、BasePortletProvider
拡張します。 -
アクションに一致する1つ以上の
PortletProvider
サブインターフェースを実装します。 -
次のような注釈を追加して、クラスをOSGiコンポーネントにします。
@Component( immediate = true、 property = {"model.class.name = CLASS_NAME"}、 service = {INTERFACE_1.class, ...} )
immediate = true
要素は、インストール直後にコンポーネントをアクティブ化することを指定します。CLASS_NAME
をエンティティの完全修飾クラス名に置き換えることにより、ポートレットが操作するエンティティのプロパティmodel.class.name
クラス名を割り当てます。 次に、model.class.name
プロパティの例を示します。「model.class.name = com.liferay.wiki.model.WikiPage」
割り当て
サービス
の要素portletproviderの
サブインターフェイス(複数可)あなたが実装しようとしているが(例えば、ViewPortletProvider.class
、BrowsePortletProvider
)。INTERFACE_1.class、...
を、実装しているサブインターフェイスのリストに置き換えます。 -
既存の
PortletProvider
オーバーライドする場合、より高い整数ランキングを持つservice.ranking:Integer
プロパティを指定することにより、独自のカスタムPortletProvider
それをオーバーランクします。property = {"service.ranking:Integer = 10"}
-
必要なプロバイダーメソッドを実装します。
PortletProvider
のgetPortletName
メソッドを必ず実装してください。BasePortletProvider
拡張しなかった場合、PortletProvider
のgetPortletURL
メソッドも実装します。
これで、 PortletProvider
を使用して、目的の動作を提供するポートレットのIDとURLを返すことができます。 使用 PortletProviderUtil
ポートレットのIDとURLをフェッチすることが次です。
目的の動作のポートレットを取得する
PortletProviderUtil
クラスを使用すると、ポートレットを取得してエンティティでアクションを実行できます。 必要なエンティティアクションを実行するポートレットのIDまたはURLを要求できます。
Portlet Providerフレームワークの PortletProvider.Action
Enumは、次のアクションタイプを定義します。
ADD
BROWSE
EDIT
MANAGE
PREVIEW
VIEW
アクションタイプとエンティティタイプは、ポートレットのIDまたはURLを取得する際の重要なパラメーターです。
ポートレットIDの取得
Portlet Providerフレームワークの PortletProviderUtil
クラスは、エンティティ操作を処理するためのポートレットのIDの取得を容易にします。 たとえば、この呼び出しは、ごみ箱のエントリを表示するためのポートレットのIDを取得します。
String portletId = PortletProviderUtil.getPortletId(
"com.liferay.portlet.trash.model.TrashEntry",
PortletProvider.Action.VIEW);
PortletProvider.Action.VIEW
は操作であり、 com.liferay.portlet.trash.model.TrashEntry
はエンティティタイプです。
もう1つの例は、Asset PublisherがPortlet Providerフレームワークを使用してプレビューされたアセットをページに追加する方法です。アセットをポートレットに追加し、そのポートレットをページに追加します。 アセット・パブリッシャーは使用 Liferayの資産を:asset_display
、そのタグライブラリタグ asset_display / preview.jsp
ショー 追加 ポートレットを追加するためのボタン。 たとえば、プレビューされたアセットがブログエントリの場合、フレームワークは、現在のページにポートレットを追加するためのブログポートレットIDまたはURLを返します。 asset_display / preview.jsp
からの関連コードは次のとおりです。
Map<String, Object> data = new HashMap<String, Object>();
<!-- populate the data map -->
String portletId = PortletProviderUtil.getPortletId(assetEntry.getClassName(), PortletProvider.Action.ADD);
data.put("portlet-id", portletId);
<!-- add more to the data map -->
%>
<c:if test="<%= PortletPermissionUtil.contains(permissionChecker, layout, portletId, ActionKeys.ADD_TO_PAGE) %>">
<aui:button cssClass="add-button-preview" data="<%= data %>" value="add" />
</c:if>
上記のコードは、 PortletProviderUtil.getPortletId(assetEntry.getClassName()、PortletProvider.Action.ADD)
を呼び出して、基礎となるエンティティクラスのアセットを追加および表示するポートレットのIDを取得します。
JSPは、ポートレットIDを データ
マップに入れます。
data.put("portlet-id", portletId);
次に、 データ
マップを、ポートレットをページに追加する新しい 追加 ボタンに渡します。
<aui:button cssClass="add-button-preview" data="<%= data %>" value="add" />
ポートレットURLの取得も同様に簡単です。
ポートレットURLの取得
PortletProviderUtil
の getPortletURL
メソッド は、 HttpServletRequest
または PortletRequest
基づいて javax.portlet.PortletURL
を返します。 また、 グループ
を指定することもできます。
たとえば、Asset Publisherが手動モードで構成されている場合、ユーザーはAsset Browserを使用してアセットエントリを選択できます。 asset-publisher-web
モジュールの configuration / asset_entries.jsp
ファイルは、 PortletProviderUtil
の getPortletURL
メソッド(以下のコードの最後)を使用して、対応するAsset Browser URLを生成します。
List<AssetRendererFactory<?>> assetRendererFactories =
ListUtil.sort(
AssetRendererFactoryRegistryUtil.getAssetRendererFactories(
company.getCompanyId()),
new AssetRendererFactoryTypeNameComparator(locale));
for (AssetRendererFactory<?> curRendererFactory : assetRendererFactories) {
long curGroupId = groupId;
if (!curRendererFactory.isSelectable()) {
continue;
}
PortletURL assetBrowserURL = PortletProviderUtil.getPortletURL(
request, curRendererFactory.getClassName(),
PortletProvider.Action.BROWSE);
これで、 PortletProvider
の兵器庫を解いてアプリで使用できるようになりました!