Expandosでカスタムフィールドにアクセスする
アプリケーションで追加のフィールドが必要な場合は、いつでも サービス モデル定義 に追加して、Service Builder を再実行できます。 これにより、データベースのテーブルに新しいカラムが追加されます。 これは機能しますが、面倒な場合があります。ユーザーを新しいスキーマに移行するためのアップグレード プロセスを記述する必要があります。 しかし、LiferayのExpando機能を使えば、データベースを修正することなく、フィールドを追加することができます。 Expandosは、Javaでオブジェクトに追加のプロパティを追加することで機能します。 サンプルプロジェクトでは、ユーザーがカスタムフィールドにアクセスするデモを行っています。
サンプルプロジェクトを参照する
新しい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に変更します。
次に、以下の手順に従います。
-
コントロール パネル → ユーザーと組織に移動します。 管理者ユーザーのオプションアイコン (
) をクリックし、 編集をクリックします。 [一般]タブで[カスタムフィールド]までスクロールします。 追加をクリックします。 -
項目タイプとして、[Input Field]を選択します。 項目名として
[f5a3Text]を入力します。[test]のように、[starting value]を入力します。 [保存]をクリックします。![ユーザーに[f5a3Text]というカスタムフィールドを作成します。](https://resources.learn.liferay.com/images/dxp/latest/en/development/traditional-java-based-development/data-frameworks/expando-framework/accessing-custom-fields-with-expando/images/01.png)
-
ダウンロードして解凍します Expando にアクセスします。
curl https://resources.learn.liferay.com/examples/liferay-f5a3.zip -Ounzip liferay-f5a3.zip -
モジュールのルートから、ビルドおよびデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)注このコマンドは、デプロイされたjarをDockerコンテナの/opt/liferay/osgi/modulesにコピーするのと同じです。
-
Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.f5a3.web_1.0.0 [1034] -
サンプルのモジュールが機能していることを確認します。 ブラウザで
https://localhost:8080を開きます。 -
サイト ページに移動し、編集アイコン (
) をクリックします。 F5A3ポートレットをページに追加します。 ウィジェットは、サンプルウィジェットの下にあります。![F5A3ポートレットを[サイトページ]に追加します。](https://resources.learn.liferay.com/images/dxp/latest/en/development/traditional-java-based-development/data-frameworks/expando-framework/accessing-custom-fields-with-expando/images/02.png)
ポートレットには、先ほど作成したユーザーのカスタムフィールドが表示されます。
ポートレットを調べる
サンプルプロジェクトでは、シンプルなMVCポートレットを使用して、カスタムフィールドを表示するJSPファイルをレンダリングしています。 ポートレットには、デフォルトのJSPファイルを表示するだけなので、コードはありません。
詳細については、「 MVC の使用」を参照してください。
JSPファイルを調べる
<liferay-theme:defineObjects> タグは、Liferay User オブジェクトにアクセスするために JSP に含まれています。 多くのLiferayオブジェクトと同様に、UserオブジェクトはExpandoBridgeサービスを継承しており、カスタムフィールドの値を作成(つまりaddAttribute())、設定(つまりsetAttribute())、取得(つまりgetAttribute())する方法が含まれています。 すべてのインターフェースのメソッドを確認するには、 ExpandoBridge javadocs を参照してください。
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ page import="com.liferay.expando.kernel.model.ExpandoBridge" %>
<liferay-theme:defineObjects />
<h4>F5A3 Portlet</h4>
<%
ExpandoBridge expandoBridge = user.getExpandoBridge();
%>
F5A3 Text: <%= expandoBridge.getAttribute("f5a3Text") %>
サンプルプロジェクトでは、ユーザーのf5a3Textカスタムフィールドに関連する値を取得する簡単な例を示しています。 アプリケーションでは、カスタムフィールドを作成、設定、取得するための独自のコードを記述してください。