jsf - 无法让 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
我不确定我在哪里失踪。
谢谢
解决方案
要获取 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。”
推荐阅读
- java - Firebase recyclerview 活动中的原生广告
- mercurial - 有没有办法在 JetBrains IDE 中查看我的分支中的所有更改?
- azure - Katalon - Azure DevOps 管道
- reactjs - React App 在 localhost 上启动,但它为主机存储库添加了一个额外的目录
- android - 在android的recyclerview中同时播放多个视频
- java - 在黄瓜测试中切换功能标志值
- python - Git + Pycharm,推送被拒绝错误,文件全部消失
- .net - 身份服务器 4 作为 API 和 Web 项目
- android - 'RawKeyboard.instance.keyEventHandler == null':不正确
- sql - Trino - 如何添加修改发出的 SQL 查询的自定义事件处理程序