Liferay:如何保存到portlet用户信息?

时间:2011-08-10 17:57:13

标签: preferences liferay portlet

我在欢迎页面上有一个天气portlet,用户可以配置portlet并选择他的城市。是否可以将用户信息存储在portlet首选项中,以便每个用户都拥有一个存储的城市?或者,在不开发自己的(持久)服务的情况下,存储用户portlet信息的标准工作流是什么?

thx

2 个答案:

答案 0 :(得分:8)

portlet首选项在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/

答案 1 :(得分:5)

它不是PortletPreference的本机函数:setValue方法只允许一个String,遗憾的是你无法传递一个Map。

然而,我看到了硬编码的解决方案,但它有点难看......

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

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

并检索数据:

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

此解决方案可行,但不要这样做,因为您拥有大量用户 Portlet首选项保存在数据库的 xml 中,如果您有100k +用户,它将会爆炸:)

如果您认为此解决方案不够干净,则必须使用ServiceBuilder创建自己的持久性方法。