Использование GWT History для передачи параметров?

У меня есть страница с названием Orders и страница с названием OrderDetails. Как описано в отличном учебнике MVP, я работаю с History (с центральным ValueChangeListener) и HandlerManager с "шиной событий".

У меня зарегистрирован обработчик для события, когда кто-то нажимает на заказ, который в основном создает OrderDetailPresenter, передает идентификатор заказа (который содержится в ShowOrderDetailEvent), а затем вызывает History.newItem("orderDetails"),

У этого есть пара основных недостатков: Этот недавно созданный шаг "История" НЕ знает, какой идентификатор заказа был передан. Так, например, если кто-то добавит страницу с информацией о заказе в закладки (или вернется в свой браузер), он получит пустой страница без деталей заказа.

Итак, мой вопрос: я должен вместо этого сделать что-то вроде History.newItem("orderDetails?id="+id), а затем проанализировать маркер истории в моем слушателе изменения значения? Если да, то есть ли лучший метод, API или библиотека для разбора и форматирования аргументов в строку таким образом?

1 ответ

Решение

Да, это то, что вы должны сделать. Насколько я знаю, нет библиотеки, чтобы сделать это проще.

Однако небольшой совет: если это вообще возможно, вам следует избегать использования схемы, которая требует от вас использовать процентные экранированные символы в строке элемента истории. Причина в том что location.hash возвращается, когда location.href заканчивается, скажем #%3C@%40 варьируется от браузера к браузеру. Например, Chrome возвращает #%3C@%40; Firefox возвращается #<@@, настройка location.hash может иметь похожие браузерные эффекты.

Механизм токенов истории GWT основан на location.hash и не нормализует эту разницу в поведении браузера. Конечным результатом является то, что если вы используете что-то, что требует процента выхода, вы получите URL, которые не могут быть разделены между браузерами - это проблема, если на какой-то другой странице вы хотите генерировать ссылки, которые переходят на определенное место в вашем GWT приложение, или если вы ожидаете, что пользователи будут обмениваться URL-адресами, на которые ссылается ваше приложение GWT (или когда ваш пользователь устанавливает Chrome, импортирует свои закладки из Firefox, которые указывают на определенные места в вашем веб-приложении, и внезапно закладки не работают, как раньше)

Для паранойи, я бы избегал ?, #, &, %, <, или же > символы в вашей строке токена истории. Тем не менее, строки, как orderDetails/oid=12313378 должно быть хорошо, и кросс-браузер.

(Отредактировано, чтобы пояснить, что проблема, о которой я говорю, связана с тем, чтобы идентичные URL-адреса работали в разных браузерах, а не с тем, чтобы метод маркера истории вообще работал в каждом из разных браузеров)

Другие вопросы по тегам