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