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
相关产品推荐
相关产品推荐

