Liferay PrincipalThreadLocal.getUserId()对于Icefaces(1.8.2)portlet为0

Liferay PrincipalThreadLocal.getUserId()对于Icefaces(1.8.2)portlet为0,liferay,liferay-6.2,icefaces-1.8,Liferay,Liferay 6.2,Icefaces 1.8,我基本上是在通用操作上实现logger,比如在portletpreferencesiml的store方法中保存portlet的首选项。这里我调用PrincipalThreadLocal.getUserId()来获取用户信息 对于Liferay OTB的portlet和Primefaces 5.2portlet,一切都很好,但是当我保存Icefaces(1.8.2)portlet的首选项时,我总是从PrincipalThreadLocal.getUserId()获得0 为什么会有这种奇怪的行为?

我基本上是在通用操作上实现logger,比如在
portletpreferencesiml
store
方法中保存portlet的首选项。这里我调用
PrincipalThreadLocal.getUserId()
来获取用户信息

对于Liferay OTB的portlet和Primefaces 5.2portlet,一切都很好,但是当我保存Icefaces(1.8.2)portlet的首选项时,我总是从
PrincipalThreadLocal.getUserId()
获得
0

为什么会有这种奇怪的行为?
请分享您的宝贵反馈。

交叉发布:您检查过了吗,如果IceFaces使用的线程与portlet线程不同(
new Exception().printStackTrace()
,就在调用
getUserId()
应该显示当前线程的stacktrace()之前)?我已经检查过了,堆栈跟踪中没有任何特殊内容。调用我的preferences类操作后,调用了PortletPreferenceSiml的store。我发现的唯一区别是,
MainServlet
service
方法正在为除Icefaces之外的其他portlet类型调用。为了增加更多的兴趣,这个servlet正在
PrincipalThreadLocal
name
属性中设置
userId
。你可以在线程上找到关于这篇文章的更多信息。