Liferay: как сохранить в портлете информацию о пользователе? - PullRequest
4 голосов
/ 10 августа 2011

У меня на странице приветствия есть портлет погоды, и пользователь может настроить портлет и выбрать свой город. Можно ли хранить информацию о пользователе в настройках портлета, чтобы у каждого пользователя был свой сохраненный город? Или каков стандартный рабочий процесс для хранения информации о портлете пользователя без разработки собственной (постоянной) службы?

thx

Ответы [ 2 ]

8 голосов
/ 12 августа 2011

Параметры портлета указаны в liferay по умолчанию и не зависят от пользователя. Это можно изменить в liferay-portlet.xml следующими строками:

<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-... и порядок сокращены.

для получения дополнительной информации см .: http://rutvijshah.wordpress.com/2009/12/06/user-specific-preferences-in-liferay/

5 голосов
/ 10 августа 2011

Это не встроенная функция PortletPreference : метод setValue допускает только строку, к сожалению, вы не можете передать карту.

Однако я вижу решение жестко закодировать ее, но это немного уродливо ...

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

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

И для извлечения данных:

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

Это решение будет работать, но не делайте этого, если у вас есть большойколичество пользователей.Настройки портлета сохраняются в xml в вашей базе данных. Если у вас более 100 тыс. Пользователей, он взорвется:)

Если вы считаете, что это решение недостаточно чистое, вам придется создать свое собственноеметод персистентности с помощью ServiceBuilder.

...