フィールドオプションプロバイダー
設定インターフェイスの @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 設定 をクリックします。
最初のドロップダウンリストには、 @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 をその色の Language.properties ファイルに格納されている文字列として設定する配列が含まれています。
このチュートリアルコードでは、文字列配列の簡単な例を使用していますが、より複雑な使用例も可能です。
EnabledClassNamesConfigurationFieldOptionsProvider.java で実際の Liferay の例をご覧ください。このコードは、 AssetRendererFactory オブジェクトのリストを取得し、リストを反復処理して、アセットのタイプ名をラベルとして、クラス名を値として使用して、 Optionの新しいリストを作成します。