ポートレットレベルの設定
構成フレームワークを使用すると、さまざまなレベルのスコープに合わせてアプリケーションの構成を設定できます。 インスタンススコープおよびサイトスコープの構成がConfigurationProvider
を使用する場合、以下の例に示すように、ポートレットスコープの構成はPortletDisplay
を使用します。
構成フレームワークをポートレットのルック&フィールと組み合わせて使用できるため、アプリには、システム設定の構成UIと、ポートレットのセットアップタブのプリファレンスUIの両方を設定できます。
ポートレットのルック&フィールがユーザーによって実装および設定されている場合、アプリケーションの構成はオーバーライドされることに注意してください。 詳細については、 ポートレットのルック&フィールを参照してください。
サンプルコードを参照する
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。
次に、以下の手順を実行します。
ローカライズされたメッセージの共有 をダウンロードし、解凍してください。
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/configuration-framework/liferay-x7y2.zip -O
unzip liferay-x7y2.zip
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.x7y2.web_1.0.0 [1651]
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080
を開きます。X7Y2ポートレットをページにデプロイします。 サンプルポートレットは、サンプルウィジェットの下にあります。 デフォルトの色が緑に設定されていることに注意してください。
[コントロールパネル] → [設定] → [System Settings] に移動します。 [Other]セクションの下部にあるX7Y2構成をクリックします。
別のデフォルトの色を選択して保存します。 ウィジェットがデプロイされているページに戻ります。 色変数が更新されました。
ポートレットのオプションアイコン(
)をクリックし、 [Configuration] をクリックします。 ポートレットの設定ウィンドウが開きます。
別の色を選択して保存します。 ウィンドウを閉じると、ポートレット設定が表示されます。 ポートレットの設定が選択された後、システム設定で設定されたアプリケーション設定は表示されなくなることに注意してください。
アプリケーションの構成がポートレット設定とどのように連携するかを調べてみましょう。
構成インターフェースを作成する
まず、システム設定で構成UIを自動生成する構成インターフェースファイルを作成します。
@ExtendedObjectClassDefinition(
category = "x7y2",
scope = ExtendedObjectClassDefinition.Scope.PORTLET_INSTANCE
)
@Meta.OCD(
id = "com.acme.x7y2.web.internal.configuration.X7Y2PortletInstanceConfiguration",
name = "X7Y2 Portlet"
)
public interface X7Y2PortletInstanceConfiguration {
@Meta.AD(
deflt = "green", name = "color",
optionLabels = {"Green", "Orange", "Purple"},
optionValues = {"green", "orange", "purple"}, required = false
)
public String color();
}
この例では、スコープはPORTLET_INSTANCE
に設定されています。 インターフェイスは、ドロップダウンリストで使用可能な構成オプションも定義します。
この例は、より高いレベルに設定されたスコープでも機能することに注意してください(つまり、 サイト、インスタンス、システムスコープ)。 ベストプラクティスは、ポートレット設定で使用する予定のアプリケーションをポートレットスコープとしてマークすることです。
詳細については、 構成インターフェースを作成する を参照してください。
DXP 7.4 U51 または Portal 7.4 GA51 より前の Liferay バージョンでは、ConfigurationBeanDeclaration
が必要です。 ConfigurationBeanDeclaration with Previous Versions of Liferay を参照してください。
PortletDisplayで構成を読み取る
構成プロバイダーAPIから構成値を読み取る のと同様に、ポートレット表示APIを使用してアプリケーションの構成値にアクセスできます。
@Component(
configurationPid = "com.acme.x7y2.web.internal.configuration.X7Y2PortletInstanceConfiguration",
property = {
"com.liferay.portlet.display-category=category.sample",
"javax.portlet.display-name=X7Y2 Portlet",
"javax.portlet.init-param.config-template=/configuration.jsp",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.name=com_acme_x7y2_web_internal_portlet_X7Y2Portlet"
},
service = Portlet.class
)
public class X7Y2Portlet extends MVCPortlet {
@Override
public void render(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
renderRequest.setAttribute(
X7Y2PortletInstanceConfiguration.class.getName(),
_getX7Y2PortletInstanceConfiguration(renderRequest));
super.render(renderRequest, renderResponse);
}
private X7Y2PortletInstanceConfiguration
_getX7Y2PortletInstanceConfiguration(RenderRequest renderRequest)
throws PortletException {
ThemeDisplay themeDisplay = (ThemeDisplay)renderRequest.getAttribute(
WebKeys.THEME_DISPLAY);
PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
try {
return portletDisplay.getPortletInstanceConfiguration(
X7Y2PortletInstanceConfiguration.class);
}
catch (ConfigurationException configurationException) {
throw new PortletException(configurationException);
}
}
}
X7Y2PortletInstanceConfiguration
メソッドは、PortletDisplay
を使用してポートレットインスタンス設定を取得します。 render()
メソッドは、JSPファイルの要求から読み取ることができるように、構成をリクエストオブジェクトに追加します。
ポートレットのルック&フィールを設定する
ポートレットにポートレットのルック&フィールを設定するには、構成JSPファイルと構成アクションもアプリケーションに追加する必要があります。 これらのファイルがポートレットでどのように機能するかについて詳しくは、 ポートレットのルック&フィール を参照してください。