フィールドオプションプロバイダー
ドロップダウンリスト は、構成インターフェイスの@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_に変更します。
次に、以下の手順に従います。
-
curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/core-frameworks/configuration-framework/liferay-z4h3.zip -O
unzip liferay-z4h3.zip
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
noteこのコマンドは、デプロイされたjarをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.z4h3.impl_1.0.0 [1150]
ブラウザで
https://localhost:8080
を開き、 [コントロールパネル] → [設定] → [システム設定] に移動します。 [プラットフォーム]で [サードパーティー] をクリックします。 左側の [Z4H3 Configuration] をクリックします 。
最初のドロップダウンリストには、@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
の新しいリストを作成します。