フィールドオプションプロバイダー
構成インターフェースの @Meta.AD アノテーションで、 ドロップダウン リストに手動で値を入力できます 。 ただし、ConfigurationFieldOptionsProviderクラスを使用して、オプションのラベルと値を自動的に入力することもできます。 これは、ドロップダウンリストに動的にデータを入力する場合に役立ちます。 たとえば、Webサービスからオブジェクトのリストをフェッチしたり、データベースを反復処理してドロップダウンリストに動的にデータを入力したりできます。
チュートリアルコードをデプロイする
新しい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-z4h3.zip -Ounzip liferay-z4h3.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされた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の新しいリストを作成します。