У меня есть портлет Liferay JSF 2.0 со следующим кодом:
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);
...
}
Все частные переменные-члены сопоставляются с полями формы ввода и имеют соответствующие геттеры и сеттеры.
Если я отследю этот код в отладчике Eclipse и изучу содержимое _publicRenderParameters HashMap экземпляра ActionResponse, я увижу, что параметры userId и org были установлены просто отлично. Переходя по следующим строкам, я вижу, что RegistrationToken имеет правильное отправленное скрытое входное значение, и выполняется последний вызов setRenderParameter().
Вот часть Bizarro World: после этого последнего вызова setRenderParameter() абсолютно не обновляется хэш-карта _publicRenderParameters HashMap в ActionResponse, и токен упорно остается неустановленным в параметрах.
Я пробовал несколько способов заставить его работать: от передачи токена через bean-компонент с областью сеанса, который мы использовали для хранения других параметров; к вызову setRenderParameter() позже в потоке кода (все еще с использованием той же ссылки ActionResponse); использовать другое имя ключа ("registrationToken") при вызове, на тот случай, если "токен" был каким-то зарезервированным именем или чем-то подобным. Ничто не получило этот последний звонок, чтобы фактически обновить карту.
Я также искал в Google все комбинации соответствующих терминов, которые только мог придумать, но не нашел ничего похожего на эту конкретную проблему.
Кто-нибудь еще столкнулся с этой проблемой? Я не понимаю, почему карта параметров ActionResponse отлично обновляется при первых двух вызовах, но не при последнем.
= Джо =