Documentation

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

構成フレームワークを使用すると、さまざまなレベルのスコープに合わせてアプリケーションの構成を設定できます。 インスタンススコープおよびサイトスコープの構成がConfigurationProviderを使用する場合、以下の例に示すように、ポートレットスコープの構成はPortletDisplayを使用します。

構成フレームワークをポートレットのルック&フィールと組み合わせて使用できるため、アプリには、システム設定の構成UIと、ポートレットのセットアップタブのプリファレンスUIの両方を設定できます。

ポートレットのルック&フィールがユーザーによって実装および設定されている場合、アプリケーションの構成はオーバーライドされることに注意してください。 詳細については、 ポートレットのルック&フィール を参照してください。

サンプルコードを参照する

新しいLiferayインスタンスを実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.22-ga22

http://localhost:8080でLiferayにサインインします。メールアドレスtest@liferay.comとパスワードtestを使用してください。プロンプトが表示されたら、パスワードをlearnに変更します。

次に、以下の手順を実行します。

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

    curl https://learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/configuration-framework/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. コントロールパネル] → [設定] → [システム設定] に移動します。 [Other]セクションの下部にあるX7Y2構成をクリックします。

    システム設定でアプリケーションの構成に移動します。

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

  7. ポートレットのオプションアイコン(options icon)をクリックし、 [設定] をクリックします。 ポートレットの設定ウィンドウが開きます。

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

    別の色を選択して保存します。 ウィンドウを閉じると、ポートレット設定が表示されます。 ポートレットの設定が選択された後、システム設定で設定されたアプリケーション設定は表示されなくなることに注意してください。

アプリケーションの構成がポートレット設定とどのように連携するかを調べてみましょう。

構成インターフェイスを作成する

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

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

詳細については、 Creating the Configuration Interface を参照してください。

構成Bean宣言を追加する

ConfigurationProviderと同様に、PortletDisplayは、構成クラスを登録するために構成Bean宣言ファイルを必要とします。 詳細については、 構成Bean宣言 を参照してください。

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ファイルと構成アクションもアプリケーションに追加する必要があります。 これらのファイルがポートレットでどのように機能するかについて詳しくは、 ポートレットのルック&フィール を参照してください。