フィールドオプションプロバイダー

フィールドオプションプロバイダー

ドロップダウンリスト は、構成インターフェイスの@Meta.ADアノテーションに手動で入力できます。 ただし、ConfigurationFieldOptionsProviderクラスを使用して、オプションのラベルと値を自動的に入力することもできます。 これは、ドロップダウンリストに動的にデータを入力する場合に役立ちます。 たとえば、Webサービスからオブジェクトのリストをフェッチしたり、データベースを反復処理してドロップダウンリストに動的にデータを入力したりできます。

チュートリアルコードをデプロイする

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。

http://localhost:8080でLiferayへのサインインします。 メールアドレス[email protected]_とパスワード_test_を使用してください。 プロンプトが表示されたら、パスワードを _learn_に変更します。

次に、以下の手順に従います。

  1. フィールドオプションプロバイダー

    curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/configuration-framework/liferay-z4h3.zip -O
    
    unzip liferay-z4h3.zip
    
  2. モジュールのルートから、ビルドおよびデプロイします。

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

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

  3. Liferay Dockerコンテナコンソールでデプロイを確認します。

    STARTED com.acme.z4h3.impl_1.0.0 [1150]
    
  4. ブラウザでhttps://localhost:8080 を開き、 [コントロールパネル] → [設定] → [システム設定] に移動します。 [プラットフォーム]で [サードパーティー] をクリックします。 左側の [Z4H3 Configuration] をクリックします 。

    設定UIには、2つのドロップダウンリストが表示されます。

最初のドロップダウンリストには、@Meta.ADアノテーションが手動で入力されます。 2番目のドロップダウンリストには、フィールドオプションプロバイダーが表示されます。

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

構成インターフェイスを作成 し、入力する構成フィールド名を設定します。

@Meta.AD(
	description = "this-list-is-manually-populated", name = "colors",
	optionLabels = {"blue", "red", "yellow"},
	optionValues = {"blue", "red", "yellow"}, required = false
)
public String colors();

@Meta.AD(
	description = "this-list-is-provider-populated",
	name = "provider-populated-colors", required = false
)
public String providerPopulatedColors();

サンプルプロジェクトでは、providerPopulatedColorsは入力される構成フィールド名です。

フィールドオプションプロバイダーを実装する

ConfigurationFieldOptionsProviderクラスを実装する新しいクラスを作成します。

@Component(
	property = {
		"configuration.field.name=providerPopulatedColors",
		"configuration.pid=com.acme.z4h3.internal.configuration.Z4H3Configuration"
	},
	service = ConfigurationFieldOptionsProvider.class
)

@Componentアノテーションを使用して、サービスを登録します。 前のステップのconfiguration.field.nameを含めます。 configuration.pidを、構成インターフェイスの完全修飾クラス名に設定します。

public List<Option> getOptions() {
	return Arrays.asList(
		_getOption("green"), _getOption("orange"), _getOption("purple"));
}

private Option _getOption(String color) {
	return new Option() {

		@Override
		public String getLabel(Locale locale) {
			ResourceBundle resourceBundle = ResourceBundleUtil.getBundle(
				"content.Language", locale, getClass());

			return LanguageUtil.get(resourceBundle, color);
		}

		@Override
		public String getValue() {
			return color;
		}

	};
}

getOptionsメソッドを追加して、 Optionのリストを返します。 サンプルプロジェクトには、optionValueを色の文字列として設定し、optionLabelをその色のLangauge.propertiesファイルに格納されている文字列として設定する配列が含まれています。

チュートリアルコードでは、文字列配列の簡単な例を使用していますが、より複雑なユースケースも可能です。

EnabledClassNamesConfigurationFieldOptionsProvider.java を使用した実際のLiferayの例を参照してください。 このコードは、AssetRendererFactoryオブジェクトのリストを取得し、リストを反復処理して、アセットのタイプ名をラベルとして、クラス名を値として使用して、Optionの新しいリストを作成します。