You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay 7/DXP中如何获取Screen Name?现有代码仅返回用户ID

解决Liferay获取用户Screen Name而非用户ID的问题

嘿,我看了你的代码,咱们来一步步排查为啥你拿到的总是用户ID数字,而不是想要的Screen Name:

首先先把你的代码贴出来方便分析:

ThemeDisplay themeDisplay;
HttpServletRequest httpRequest;
themeDisplay = (ThemeDisplay) httpRequest.getAttribute(WebKeys.THEME_DISPLAY);
User user = null;
long userId1 = themeDisplay.getUserId();
user = UserLocalServiceUtil.getUserById(userId1);
String screenname1 = user.getScreenName();

最可能的小疏忽:你是不是输出错了变量?

很多时候出现这种情况,是因为最后打印/返回的是userId1而不是screenname1。比如你可能写了System.out.println(userId1)而不是System.out.println(screenname1),先检查一下输出的变量名是不是正确的。

检查用户的Screen Name本身是否就是数字ID

如果输出的确实是screenname1但还是数字,那可能是这个用户的Screen Name在Liferay系统里本身就被设置成了用户ID。你可以登录Liferay控制面板,找到该用户的账号详情页,查看Screen Name字段的内容——有些场景下(比如批量导入用户、系统自动创建用户),Screen Name会默认使用用户ID的数字值。

确认你要的是Screen Name还是真实姓名

如果你其实想要的是用户的真实姓名(比如“张三”)而不是登录用的Screen Name,那应该调用user.getFullName()而不是user.getScreenName()。Screen Name是用户的登录标识,而Full Name才是用户的显示名称。

优化后的代码示例

给你整理了更简洁且不易出错的代码,还加上了打印验证:

// 从请求中获取ThemeDisplay
ThemeDisplay themeDisplay = (ThemeDisplay) httpRequest.getAttribute(WebKeys.THEME_DISPLAY);

// 直接从ThemeDisplay获取当前用户对象,无需再通过ID查询
User currentUser = themeDisplay.getUser();

// 获取Screen Name
String screenName = currentUser.getScreenName();
System.out.println("用户Screen Name:" + screenName);

// 如果需要真实姓名
String fullName = currentUser.getFullName();
System.out.println("用户真实姓名:" + fullName);

额外注意事项

  • 确保你的代码有足够的权限访问用户信息:一般获取当前登录用户的信息是不受限的,但如果是访问其他用户的信息,需要确认权限配置。
  • 直接用themeDisplay.getUser()比通过ID查询更高效,也避免了ID查询可能出现的异常。

内容的提问来源于stack exchange,提问作者Palanivel Venkatachalam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:46:37