我有一个 Liferay JSF 2.0 portlet,其代码如下:
private String userId
private String organization
private String registrationToken
...
public String submitLogin() {
ActionResponse actionResponse = (ActionResponse) PortletUtil.getExternalContext().getResponse();
actionResponse.setRenderParameter("userId", this.userId);
actionResponse.setRenderParameter("org", this.organization);
if ( StringUtils.hasText(this.registrationToken) )
actionResponse.setRenderParameter("token", this.registrationToken);
...
}
所有私有成员变量都映射到输入表单字段并具有适当的 getter 和 setter。
如果我在 Eclipse 的调试器中跟踪此代码并检查 ActionResponse 实例的 _publicRenderParameters HashMap 的内容,我会发现 userId 和 org 参数设置得很好。遍历下一行,我看到 registrationToken 具有正确提交的隐藏输入值,并且正在进行最后一次 setRenderParameter() 调用。
这是 Bizarro World 部分:在最后一次 setRenderParameter() 调用之后,ActionResponse 中的 _publicRenderParameters HashMap 绝对没有更新,并且令牌在参数中顽固地保持未设置。
我尝试了多种方法来使其工作,从将令牌传递给我们用于保存其他参数的会话范围的 bean;稍后在代码流中调用 setRenderParameter() (仍然使用相同的 ActionResponse 引用);在通话中使用不同的密钥名称(“registrationToken”),以防“token”是某种保留名称或其他东西。没有人得到最后一次调用来实际更新地图。
我还用谷歌搜索了我能想到的所有相关术语的组合,但没有找到类似这个特定问题的任何东西。
有没有其他人遇到过这个问题?我不知道为什么 ActionResponse 的参数映射在前两个调用中更新得很好,但不是最后一个。
=乔=