在Liferay 6.2中获取当前用户(themeDisplay始终为null)

时间:2015-03-29 13:23:23

标签: jsp liferay struts-1

我尝试在jsp页面中获取当前用户的id:

<%@page import="com.liferay.portal.theme.*" %>
<%@page import="com.liferay.portal.kernel.util.WebKeys" %>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<%
themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
User objUser=themeDisplay.getUser(); 
%>    

但是themeDisplay总是返回null !!

我还尝试使用以下方法在我的struts动作中获取它:

public class acces extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ThemeDisplay themeDisplay =
(ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
Long currentuser = themeDisplay.getUserId();

但仍然返回null

我使用liferay 6.2 ce,webmodule struts 1.2使用appManager中的install安装到liferay中作为war文件。

请帮助,我错过了一些配置?

3 个答案:

答案 0 :(得分:0)

在Liferay中获取当前登录用户的方法不止一种。

1] User currentUser = PortalUtil.getUser( request );

2] User currentUser = (User) request.getAttribute(WebKeys.USER);

3]

ThemeDisplay td  = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY );
User currentUser = td.getUser();`

4]

LiferayFacesContext liferayFacesContext = LiferayFacesContext.getInstance();
User currentUser = liferayFacesContext.getUser();
希望其中一人可以帮助你。

答案 1 :(得分:0)

关于你对我的初步问题的答复......

如果你的Struts应用程序可以被添加,那就意味着它里面至少有一个portlet.xml文件(我不知道Liferay应用程序管理器是否为你添加了它)...无论如何你可以&# 39;以这种方式访问​​上下文。

Struts创建portlet应用程序的最佳方法是使用Struts Portlet Bridge;如何在我提供的链接中看到它允许您的代码符合JSR规范;那么它应该能够与portlet容器进行交互...

您可以尝试使用一个操作并测试它是否解决了您的问题......标准Web应用程序与Portlet应用程序之间的转换应该尽可能轻松。

答案 2 :(得分:0)

您似乎错过了taglib指令您可以通过在jsp中执行以下操作来获取Liferay中的用户对象:

<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="theme" %>
<theme:defineObjects/> <%-- Gives you the user object. --%>
<%= user.getLogin() %>

请参阅https://docs.liferay.com/portal/6.2/javadocs-all/com/liferay/portal/model/User.html