Epa*_*aga 10 java gwt history url-encoding gwt-history
我有一个名为Orders的页面和一个名为OrderDetails的页面.正如优秀的MVP教程中所述,我正在使用History(带有一个中央ValueChangeListener)和一个"事件总线"HandlerManager.
我有一个为某个人点击订单的事件注册的处理程序,它基本上创建了OrderDetailPresenter,传递了订单ID(包含在ShowOrderDetailEvent中),然后调用History.newItem("orderDetails")
.
这有几个主要缺点:这个新创建的历史记录步骤不知道传入了哪个订单ID.例如,如果有人为订单详细信息页面添加书签(或者在浏览器中返回然后向前),它们将变为空没有订单详情的页面.
所以我的问题是:我应该做一些类似的事情History.newItem("orderDetails?id="+id)
,然后在我的值变更监听器中解析历史记录吗?如果是这样,是否有最佳实践,API或库以这种方式将参数解析并格式化为字符串?
是的,这就是你应该做的.据我所知,没有任何图书馆可以让这更容易.
但是有一些建议:如果可能的话,你应该避免使用一个需要你在历史项目字符串中使用百分比转义的方案.原因是结束location.hash
时返回的内容location.href
,例如#%3C@%40
因浏览器而异.例如,Chrome返回#%3C@%40
; Firefox返回#<@@
.设置location.hash
可以具有类似的浏览器特定效果.
GWT的历史记录令牌机制依赖于location.hash
并且不会规范化浏览器行为中的这种差异.最终的结果是,如果您使用需要百分比转义的内容,您将获得无法在浏览器之间共享的网址 - 如果在其他某个页面上您希望生成跳转到GWT中特定位置的链接,则会出现问题应用程序,或者如果您希望用户共享链接到您的GWT应用程序中的URL.(或者当您的用户安装Chrome时,从Firefox中导入他们的书签,指向您的webapp中的特定位置,并且突然书签不像以前那样工作)
对于偏执狂,我会避免将任何?
,#
,&
,%
,<
,或者>
人物在历史记录中标记字符串.但是,字符串orderDetails/oid=12313378
应该没问题,并且跨浏览器.
(编辑澄清说我正在讨论的问题是处理相同的URL在多个不同的浏览器中工作,而不是让历史令牌方法在各种浏览器中都工作)