2011-08-10 23 views
4

私は天気のポートレットをウェルカムページに持ち、ユーザーはポートレットを設定して自分の都市を選択できます。ポートレットプリファレンスにユーザー情報を格納することは可能ですか?すべてのユーザーが1つの保存された都市を持つようにしますか?または、独自の(永続的な)サービスを開発せずにユーザー・ポートレット情報を保管する標準のワークフローは何ですか?Liferay:ポートレットのユーザー情報を保存する方法は?

THX

答えて

8

ポートレットの設定は、ユーザーごとに異なります。

<liferay-portlet-app> 
    <portlet> 
    <portlet-name>ThePortletWitchUserSpecificPreferences</portlet-name> 
    <icon>/icon.png</icon> 
    <preferences-unique-per-layout>false</preferences-unique-per-layout> 
    <preferences-owned-by-group>false</preferences-owned-by-group> 
    </portlet> 
... 
</liferay-portlet-app> 

二行<preferences-...及び順序が略されている:それは、次の行でliferay-portlet.xmlに修飾することができます。詳細については、

参照: http://rutvijshah.wordpress.com/2009/12/06/user-specific-preferences-in-liferay/

5

それはPortletPreferenceのネイティブ関数ではありません:だけで文字列を許可し、残念ながらあなたは地図を渡すことはできませんsetValueメソッド。

はしかし、私はそれをハードコーディングするためのソリューションを参照してください、それは...

Long userId = ...... ; 
String userValue = ..... ; 

PortletPreferences prefs = request.getPreferences(); 
prefs.setValue("myConfig-"+userId, myUserVal); 
prefs.store(); 

し、データを取得のための少し醜いです:

String userValue = prefs.getValue("myConfig-"+userId, defaultValue); 

このソリューションが動作します、しかし、それはあなたが多数のユーザーを持っているということではありません。
ポートレットプリファレンスを使用すると、100K +のユーザーを持っている場合、それが爆発する、データベース内のXMLで保存されている:)あなたはこのソリューションが十分にきれいではないと思われる場合は、あなたとあなた自身の永続化メソッドを作成する必要があります

ServiceBuilder。

+0

は1つのポートレットでユーザー固有の共有設定を組み合わせることで、私のLiferayのブログをチェックアウト:https://www.liferay.com/web/pmesotten/blog/-/blogs/user-specific-versus-shared-portlet-preferences-part-2 –

+0

私はこのアプローチを提案しません - あなたが言ったように、それは多数のユーザーに拡大されません。本当に戻ってきて、後であなたに咬ませる。 – Yoshiya

関連する問題