Configuration Framework
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

ポートレットレベルの設定

構成フレームワークを使用すると、 アプリケーションの構成をさまざまなレベルのスコープ に対して設定できます。インスタンススコープおよびサイトスコープの構成が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 に変更してください。

次に、以下の手順に従ってください。

  1. ローカライズされたメッセージの共有 をダウンロードして解凍します。

    curl https://resources.learn.liferay.com/examples/liferay-x7y2.zip -O
    
    unzip liferay-x7y2.zip
    
  2. モジュールのルートディレクトリから、ビルドとデプロイを実行します。

    ./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
    
    注記

    このコマンドは、デプロイされた jar ファイルを Docker コンテナの /opt/liferay/osgi/modules にコピーすることと同じです。

  3. Liferay Dockerコンテナコンソールでデプロイメントを確認してください。

    STARTED com.acme.x7y2.web_1.0.0 [1651]
    
  4. サンプルモジュールが正しく動作することを確認してください。ブラウザで https://localhost:8080 を開いてください。

  5. X7Y2ポートレットをページにデプロイします。サンプルポートレットは「サンプルウィジェット」の項目にあります。デフォルトの色は緑に設定されていることに注意してください。

  6. グローバルメニュー (Global Menu) → コントロールパネル → システム設定 に移動します。 X7Y2の設定をクリックしてください。

    システム設定からアプリケーションの設定画面に移動してください。

    別のデフォルトカラーを選択して保存します。ウィジェットを配置したページに戻ります。色の変数が更新されました。

  7. ウィジェットヘッダーにあるポートレットのオプションアイコン(Widget Options icon)をクリックします → 設定。ポートレットの設定ウィンドウが開きます。

    設定をクリックしてポートレットの設定を開きます。

    注記

    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 に設定されています。インターフェースでは、ドロップダウンリストで使用可能な設定オプションも定義されています。

この例は、より高いレベルでスコープが設定されている場合にも機能することに注意してください(つまりサイト、インスタンス、システムスコープ)。ポートレット設定で使用する予定のアプリケーションは、ポートレットスコープとしてマークするのがベストプラクティスです。

詳細については、 構成インターフェイスの作成 を参照してください。

注記

Liferay のバージョンが DXP 7.4 U51 または Portal 7.4 GA51 より前の場合は、 ConfigurationBeanDeclaration が必要です。 Liferay の以前のバージョンでの ConfigurationBeanDeclaration については、 を参照してください。。

PortletDisplay で構成を読み込む

構成プロバイダー APIから構成値を読み取るのと同様に、ポートレット表示 API を使用してアプリケーションで構成値にアクセスできます。

@Component(
	configurationPid = "com.acme.x7y2.web.internal.configuration.X7Y2PortletInstanceConfiguration",
	property = {
		"com.liferay.portlet.display-category=category.sample",
		"jakarta.portlet.display-name=X7Y2 Portlet",
		"jakarta.portlet.init-param.config-template=/configuration.jsp",
		"jakarta.portlet.init-param.view-template=/view.jsp",
		"jakarta.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ファイルと設定アクションを追加する必要があります。これらのファイルがポートレットでどのように機能するかについて詳しくは、 ポートレット設定 を参照してください。