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/
它不是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创建自己的持久性方法.