完全なカスタム構成
構成インターフェースを作成すると、構成 UI が自動的に生成されます。 ただし、構成に完全にカスタムのUIが必要な場合もあります。 たとえば、Liferayの構成管理を使用する代わりに、プログラムで構成を処理するよう計画している場合などです。 または、完全にカスタムのUIを作成する柔軟性が必要な場合もあります。 その方法は以下の通りです。
サンプルプロジェクトを参照する
新しいLiferay DXPインスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2025.q1.6-lts
メールアドレス test@liferay.com とパスワード testを使用して、 http://localhost:8080 で Liferay にサインインします。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
完全カスタム構成をダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-u2g5.zip -Ounzip liferay-u2g5.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.u2g5.web_1.0.0 [1034] -
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080を開きます。 -
コントロール パネル → 構成 → システム設定 → サードパーティに移動します。 U2G5 構成をクリックします。

このビューはカスタムJSPファイルによって提供されることに注意してください。
構成インターフェースを作成する
構成インターフェイスで構成可能な属性を定義します。 サンプルプロジェクトには、fontColor、fontFamily、およびfontSizeの3つの構成可能な属性があります。
@ExtendedObjectClassDefinition(
category = "u2g5", generateUI = false,
scope = ExtendedObjectClassDefinition.Scope.SYSTEM
)
@Meta.OCD(
id = "com.acme.u2g5.web.internal.configuration.U2G5WebConfiguration",
localization = "content/Language", name = "u2g5-configuration-name"
)
public interface U2G5WebConfiguration {
@Meta.AD(deflt = "blue", required = false)
public String fontColor();
@Meta.AD(deflt = "serif", required = false)
public String fontFamily();
@Meta.AD(deflt = "16", required = false)
public int fontSize();
}
@ExtendedObjectClassDefinitionアノテーションでは、generateUIがfalseに設定されていることに注意してください。 これにより、構成UIが自動生成されなくなります。
DXP 7.4 U51 または Portal 7.4 GA51 より前の Liferay バージョンでは、 ConfigurationBeanDeclaration が必要です。 以前のバージョンの Liferay での ConfigurationBeanDeclarationを参照してください。
設定画面を実装する
-
@Componentアノテーションを使用して、ConfigurationScreenの実装としてクラスを宣言します。@Component(service = ConfigurationScreen.class) -
カテゴリーキー、設定エントリーのキー、およびそのローカライズされた名前を設定します。 サンプルプロジェクトでは、システム設定でカテゴリーキーが
third-partyに設定されています。 構成名のString値は、バンドルのLanguage.propertiesファイルの言語キーによって設定されます。
@Override
public String getCategoryKey() {
return "third-party";
}
@Override
public String getKey() {
return "u2g5-configuration-name";
}
@Override
public String getName(Locale locale) {
return LanguageUtil.get(
ResourceBundleUtil.getBundle(locale, U2G5ConfigurationScreen.class),
"u2g5-configuration-name");
}
- この例では、構成スコープは
systemに設定されています。 詳細については、 スコープ構成を参照してください。
@Override
public String getScope() {
return "system";
}
render()メソッドはConfigurationProviderを使用して構成を取得します。 サーブレットコンテキストは、リクエストディスパッチャへのアクセスを提供します。これにより、カスタムJSPが構成を読み取ることができます。
@Override
public void render(
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws IOException {
try {
RequestDispatcher requestDispatcher =
_servletContext.getRequestDispatcher("/u2g5.jsp");
httpServletRequest.setAttribute(
U2G5WebConfiguration.class.getName(),
_configurationProvider.getSystemConfiguration(
U2G5WebConfiguration.class));
requestDispatcher.include(httpServletRequest, httpServletResponse);
}
catch (Exception exception) {
throw new IOException("Unable to render /u2g5.jsp", exception);
}
}
- 必ず
@Referenceアノテーションを使用して、モジュールのシンボル名を定義してください。
@Reference(
target = "(osgi.web.symbolicname=com.acme.u2g5.web)", unbind = "-"
)
Web-ContextPathを追加する
bnd.bndファイルでバンドルのWeb-ContextPathを指定します。 たとえば、サンプルプロジェクトのBndファイルにはWeb-ContextPath: /u2g5-webがあります。 これは、構成画面ファイルにServletContextオブジェクトを登録するものです。 サーブレットコンテキストはポートレット用に自動的に作成されますが、このサンプルにはポートレットがないため、この行をBndファイルに追加する必要があることに注意してください。
カスタムJSPを作成する
-
構成インターフェースをJSPにインポートします。
<%@ page import="com.acme.u2g5.web.internal.configuration.U2G5WebConfiguration" %> -
リクエストオブジェクトから構成値にアクセスします。
<% U2G5WebConfiguration u2g5WebConfiguration = (U2G5WebConfiguration)request.getAttribute(U2G5WebConfiguration.class.getName()); %> -
属性
fontColor()、fontFamily()、fontSize()をJSPで使用できるようになりました。
このサンプルプロジェクトは、ConfigurationScreenを使用してカスタムJSPで構成値を読み取って表示する方法の基本的な例を示しています。 アプリケーションで、独自のコードを記述し、ニーズに合わせて完全にカスタムの構成UIを作成します。