首页 > 解决方案 > 无法让 Liferay 登录 UserId

问题描述

我正在尝试获取 liferay userId(我在 Liferay 7 中使用 primefaces 6.2)。

到目前为止,我尝试过的是:

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

ThemeDisplay td  =(ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
long userId = td.getUserId();

我收到以下错误:

ERROR [stderr] (default task-49) java.lang.ClassCastException: com.liferay.faces.bridge.ext.filter.internal.ResourceRequestBridgeLiferayImpl cannot be cast to javax.servlet.http.HttpServletRequest

我已经搜索了问题,但无法找到可行的解决方案。任何帮助将不胜感激。

提前致谢。


我也尝试过使用 PortletRequest。下面是代码。

PortletRequest request = (PortletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

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

但是现在找不到 ThemeDisplacy 类

java.lang.NoClassDefFoundError: com/liferay/portal/theme/ThemeDisplay: javax.el.ELException: java.lang.NoClassDefFoundError: com/liferay/portal/theme/ThemeDisplay

我不确定我在哪里失踪。

谢谢

标签: jsfliferay

解决方案


要获取 Liferay 用户对象,您可以使用以下代码段:

FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();
User u = PortalUtil.getUser(portletRequest);

另请阅读这篇关于 ExternalContext.getRequest() 的返回值的文章 - 这可能是您的转换错误的原因。文章进一步解释说:“ExternalContext.getRequest() 方法返回的是 anObject而不是javax.servlet.http.HttpServletRequest。当在门户中使用此方法时,可以将 Object 强制转换为 javax.portlet.PortletRequest。”


推荐阅读