拡張子を使用してカスタムフィールドにアクセスする
アプリケーションに追加のフィールドが必要な場合は、いつでもサービスモデル定義に追加して、サービスビルダーを再実行することができます。 これにより、データベースのテーブルに新しいカラムが追加されます。 これは有効な方法ですが、面倒な場合もあります。ユーザーを新しいスキーマに移行するためのアップグレードプロセスを作成する必要があるからです。 しかし、LiferayのExpando機能を使えば、データベースを修正することなく、フィールドを追加することができます。 Expandosは、Javaでオブジェクトに追加のプロパティを追加することで機能します。 サンプルプロジェクトでは、ユーザーがカスタムフィールドにアクセスするデモを行っています。
サンプルプロジェクトを参照してください
Liferay DXP の新しいインスタンスを起動するには、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/dxp:2026.q1.9-lts
http://localhost:8080 に、メールアドレス test@liferay.com とパスワード test を使用して Liferay にサインインします。 プロンプトが表示されたら、パスワードを learn に変更してください。
次に、以下の手順に従ってください。
-
コントロール パネル → ユーザーと組織 に移動します。 管理者ユーザーのオプションアイコン(
)をクリックし、 編集をクリックします。 「一般」タブで、「カスタムフィールド」までスクロールしてください。 をクリックしてを追加します。 -
フィールドタイプとして、入力フィールド を選択します。 フィールド名として
f5a3Textを入力してください。testのような開始値を入力してください。 をクリックして保存します。
-
ダウンロードして解凍します 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コンテナコンソールでデプロイメントを確認してください。
com.acme.f5a3.web_1.0.0 [1034] を開始しました -
サンプルモジュールが正しく動作することを確認してください。 ブラウザで
https://localhost:8080を開いてください。 -
サイトページに移動し、編集アイコン(
)をクリックします。 ページにF5A3ポートレットを追加します。 このウィジェットは「サンプルウィジェット」の中にあります。
このポートレットには、先ほど作成したユーザーのカスタムフィールドが表示されます。
ポートレットを調べる
このサンプルプロジェクトでは、シンプルなMVCポートレットを使用して、カスタムフィールドを表示するJSPファイルをレンダリングします。 ポートレットにはコードは含まれておらず、デフォルトのJSPファイルを表示するだけです。
詳細については、 MVC の使用 を参照してください。
JSPファイルを調べます
<liferay-theme:defineObjects> タグは、Liferay User オブジェクトにアクセスするために JSP に含まれています。 多くの Liferay オブジェクトと同様に、 User オブジェクトには、カスタム フィールド値の作成 (つまり、 addAttribute()、設定 (つまり、 setAttribute())、および取得 (つまり、 getAttribute()) 方法を含む継承された ExpandoBridge サービスがあります。 すべてのインターフェースのメソッドについては、 ExpandoBridge の Javadoc を参照してください。
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ page import="com.liferay.expando.kernel.model.ExpandoBridge" %>
<liferay-theme:defineObjects />
<h4>F5A3 ポートレット</h4>
<%
ExpandoBridge expandoBridge = user.getExpandoBridge();
%>
F5A3 テキスト: <%= expandoBridge.getAttribute("f5a3Text") %>
サンプルプロジェクトは、ユーザーのカスタムフィールド f5a3Text に関連付けられた値を取得する簡単な例を示しています。 アプリケーション内で、カスタムフィールドの作成、設定、取得を行うための独自のコードを記述してください。