我对portlet开发很陌生,我想知道如何为每个用户存储首选项。我使用的是WebSphere 8.5 Portal Server,Spring 4.3.2和RAD v9.5。
目前我正在使用PortletPreferences
将数据存储在我的Controller.java
中,如下所示:
@ActionMapping(params = "action=saveUserPref")
public void saveUserSettings(ActionRequest req, @RequestParam("radio") String color) throws ReadOnlyException, ValidatorException, IOException {
PortletPreferences pref = req.getPreferences();
pref.setValue(accountService.getUsername()+"_fontcolor", color);
pref.store();
}
并在我的.jsp
中获得这样的偏好:
<div style="color:<%=renderRequest.getPreferences().getValue(renderRequest.getPortletSession().getAttribute("username")+"_fontcolor",
"black")%>;">
我在一些帖子中读到这种方法有效,但它不是保存用户偏好的最简洁方法,因为如果你有大量的用户,这将变得非常慢。
现在我正在寻找一种快速的方法来保存并获得偏好,即使是大量的用户。现实世界中最佳实践解决方案是什么?
答案 0 :(得分:1)
即使在一些100k用户范围内,我也从未见过这是一个性能问题。 Portlet首选项应该用于特定于portlet的首选项,如果它们要通过多个portlet共享,则存储它们的更好位置是像ldap这样的用户存储。如果您使用ldap portal为您处理缓存。您还可以使用数据库作为Portal的一部分并在数据库中存储用户属性,它们来自PUMA的用户对象的一部分。
对于portlet首选项,我建议对它们进行缓存,这样您就不必每次都进入门户层。
最后,特定于portlet的首选项,保存到特定于用户的portlet首选项,放在像ldap这样的用户存储中,放在一边或类似于使用自己的数据库的portlet服务。