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

Mar*_*ark 4 portlet preferences liferay

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

谢谢

小智 8

默认情况下,portlet-preferences处于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>
Run Code Online (Sandbox Code Playgroud)

两行<preferences-...和顺序都是缩写.

欲了解更多信息,请访问:http: //rutvijshah.wordpress.com/2009/12/06/user-specific-preferences-in-liferay/


Jul*_*ont 5

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

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

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

PortletPreferences prefs = request.getPreferences();
prefs.setValue("myConfig-"+userId, myUserVal);
prefs.store();
Run Code Online (Sandbox Code Playgroud)

并检索数据:

String userValue = prefs.getValue("myConfig-"+userId, defaultValue);
Run Code Online (Sandbox Code Playgroud)

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

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