2009-11-03 2 views
4

Обновление: Я попытался очистить созданный файл cookie в браузере и повторить попытку, и этого не произошло. По-видимому, я установил cookie со значением «null» в какой-то момент.GWT Cookies.getCookie возвращает «null»

(Хорошо, это, вероятно, retorical вопрос, так что я делаю это CW)

Документация для Google Web Toolkit говорит это о Cookies.getCookie:

общественности статической Java. lang.String getCookie (java.lang.String name)

Получает файл cookie, связанный с данным именем.

Параметры:

  • имя - имя куки должны быть получены

Возвраты:

  • значение куки, либо нулевое значение, если куки не есть

Ну, я только что провел несколько часов, ударяя головой о стену, потому что, по крайней мере, в браузере с размещенным режимом (я еще не тестировал настоящий браузер), он не возвращает null, он возвращает «null», т.е. буквальная строка, длиной 4 символа, начиная с «n».

И утратившие «нулевой» выглядит удивительно похож, если распечатать их, но только один ответ на if (cookie == null) Cookies.setCookie(cookie, newValue);

Есть ли мыслима причина, почему Google сделал это так, или кто-то просто завинчивание вокруг меня?

ответ

1

Я могу понять вашу головную боль (я отправил ошибку о печенье документации GWT некоторое время назад: http://code.google.com/p/google-web-toolkit/issues/detail?id=387&can=1)

Какой версии GWT вы используете?

В какой браузер вы тестировали?

Я просто посмотрел код для 1.6.4 (они отправляют источник), и я бы рекомендовал вам записать это как ошибку. См. Вопрос 2994 о чем-то близком, но я думаю, что это совсем другое, чтобы предотвратить его собственную регистрацию ошибок.

Похоже, что GWT обрабатывает hashmaps другим способом (по соображениям производительности?), Чем обычные hashmaps; см. java.util.AbstractHashMap в каталоге com/google/gwt/emul при распаковке файла gwt-user.jar. Вот ссылка() impelementation.

return (key == null) ? nullSlot : (!(key instanceof String) ? getHashValue(
    key, getHashCode(key)) : getStringValue((String) key)); 

И, возможно, это проблема.

Надеюсь, это поможет.

Dan

0

Возможно, попытка с продолжительностью может изменить ситуацию. Попробуйте следующее:

Date now = new Date(); 
long nowLong = now.getTime(); 
nowLong = nowLong + (1000 * 60 * 60 * 24 * 7);//seven days 
now.setTime(nowLong); 

Cookies.setCookie("sampleCookieName", "sampleCookiValue", now); 
+0

Моя точка зрения заключалась в том, что я не установил куки-файл, и getCookie возвращал строку «null» вместо реального значения NULL, такого как документация, подразумеваемая сильно. –

1

Вы уверены, что cookie не установлен в значение "null"? Вы должны взглянуть на заголовки ответа, просто чтобы убедиться. В зависимости от версии GWT это возможно по-разному - проще всего ударить «Скомпилировать» и попробовать настоящий браузер, они упрощают просмотр заголовков.

+0

Это произошло до того, как у меня появился код setCookie - я просто задавался вопросом, почему мой код «cookie generation» не выполняется. К сожалению, это похоже на браузер Hosted Mode, и я не знаю, как очистить файлы cookie в этом браузере, чтобы проверить проблему. –

+0

вы можете удалить файл cookie с клиентской стороны, истек срок его действия. http://blogs.x2line.com/al/articles/316.aspx - вы также можете перечислить сторону клиента cookie, чтобы узнать, что там есть. – user136776

1

Я думаю, что установка печенье нуль делает значение куки «нуль» (строка) Вы должны удалить куки с Cookies.removeCookie («CookieName»), которые должны удалить куки и запрос вернет реальный null, а не строку.

Смежные вопросы