ポートレットレベルの構成
構成フレームワークを使用すると、 アプリケーションの構成をさまざまなレベルのスコープに設定できます。 インスタンススコープおよびサイトスコープの構成がConfigurationProviderを使用する場合、以下の例に示すように、ポートレットスコープの構成はPortletDisplayを使用します。
構成フレームワークをポートレットのルック&フィールと組み合わせて使用できるため、アプリには、システム設定の構成UIと、ポートレットのセットアップタブのプリファレンスUIの両方を設定できます。
ポートレットのルック&フィールがユーザーによって実装および設定されている場合、アプリケーションの構成はオーバーライドされることに注意してください。 詳細については、 ポートレット設定 を参照してください。
サンプルコードを参照する
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
「ローカライズされたメッセージの共有」をダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-x7y2.zip -Ounzip liferay-x7y2.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナ上の
/opt/liferay/osgi/modulesにコピーするのと同じです。 -
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.x7y2.web_1.0.0 [1651] -
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080を開きます。 -
X7Y2ポートレットをページにデプロイします。 サンプルポートレットは、サンプルウィジェットの下にあります。 デフォルトの色が緑に設定されていることに注意してください。
-
コントロール パネル → 構成 → システム設定に移動します。 [Other]セクションの下部にあるX7Y2構成をクリックします。

別のデフォルトの色を選択して保存します。 ウィジェットがデプロイされているページに戻ります。 色変数が更新されました。
-
ウィジェット ヘッダーのポートレットのオプション アイコン (
) をクリックし、 [構成]をクリックします。 ポートレットの設定ウィンドウが開きます。
注Liferay DXP 2025.Q1/Portal GA132 より前では、設定オプションはウィジェットの右上隅に表示されていました。
別の色を選択して保存します。 ウィンドウを閉じると、ポートレット設定が表示されます。 ポートレットの設定が選択された後、システム設定で設定されたアプリケーション設定は表示されなくなることに注意してください。
アプリケーションの構成がポートレット設定とどのように連携するかを調べてみましょう。
構成インターフェースを作成する
まず、システム設定で構成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 が必要です。 以前のバージョンの Liferay での ConfigurationBeanDeclarationを参照してください。
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);
try {
return _configurationProvider.getPortletInstanceConfiguration(
X7Y2PortletInstanceConfiguration.class, themeDisplay);
}
catch (ConfigurationException configurationException) {
throw new PortletException(configurationException);
}
}
@Reference
private ConfigurationProvider _configurationProvider;
}
X7Y2PortletInstanceConfigurationメソッドは、PortletDisplayを使用してポートレットインスタンス設定を取得します。 render()メソッドは、JSPファイルの要求から読み取ることができるように、構成をリクエストオブジェクトに追加します。
ポートレットのルック&フィールを設定する
ポートレットにポートレットのルック&フィールを設定するには、構成JSPファイルと構成アクションもアプリケーションに追加する必要があります。 これらのファイルがポートレット内でどのように機能するかの詳細については、「 ポートレット設定」を参照してください。