コントロールパネルで設定したカスタム属性をJSPではなくWEBコンテンツテンプレート(Velocity)で取得・更新する方法のメモです。


まず前提として、コントロールパネルでカスタム属性を入力している必要があります。
下のコードでは、「住所」というカスタム属性が入っている状態です。
そして、住所の値には「東京都」が入っている状態です。

ちなみに、カスタム属性「住所」はexpandocolumnテーブルのnameカラムに、カスタム属性「住所」の値はexpandovalueテーブルのdata_カラムにそれぞれ入ります。


##ユーザー情報(userLocalService)を取得
#set ($userid = 10433) //サンプルにつきユーザーIDを固定してます
#set ($userLocalService = $localeUtil.getClass().forName("com.liferay.portal.service.UserLocalServiceUtil").getMethod("getService", null).invoke(null, null))
#set ($user = $userLocalService.getUser($userid))

##カスタム属性をセット
#set ($setA = "東京都目黒")
#set ($voiddata = $user.getExpandoBridge().setAttribute("住所", $setA))
#set ($customVal = $user.getExpandoBridge().getAttribute("住所"))

<p>住所:$customVal</p>
 


これを実行すると以下の結果が返ってきます。
住所:東京都目黒
ちなみに、setAttributeメソッドはvoid型なので、一度変数に代入する必要あります。
これに気付くまでけっこうハマりました。