java – 使用GWT历史传递参数?

我有一个名为Orders的页面一个名为OrderDetails的页面.正如在优秀的 MVP tutorial中所描述的,我正在使用历史记录(带有一个中心的Valuechangelistener)和一个“事件总线”HandlerManager.

我有一个处理程序注册的事件有人点击一个订单,这基本上创建了OrderDetailPresenter,传递在订单ID(包含在ShowOrderDetailEvent),然后调用History.newItem(“orderDetails”).

这有几个主要的缺点:这个新创建的历史记录步骤不知道传递了哪个订单ID.例如,如果有人将订单详细信息页面(或在浏览器中返回,然后转发),他们将获得一个空的没有订单的页面.

所以我的问题是:是否应该像History.newItem(“orderDetails?id =”id)这样做,然后解析我的值更改侦听器中的历史记录?如果是这样,最好的做法,一个API或者库,以这种方式解析和格式化参数到一个字符串?

解决方法

是的,那就是你应该做的据我所知,没有一个图书馆让这个更容易.

有一点建议,尽管如果可能的话,你应该避免使用一个需要你在历史记录项目字符串中使用百分比转义的方案.原因是当location.href结束时,什么location.hash返回,说#<@@因浏览器而异.例如,Chrome返回#<@@; Firefox返回#< @@.设置location.hash可以具有类似的浏览器特定效果. GWT的历史令牌机制依赖于location.hash,并且不会使浏览器行为的这种差异正常化.最终的结果是,如果您使用需要百分比转义的东西,您将获得无法通过浏览器共享的网址 – 如果在其他页面上要生成跳转到GWT中特定位置的链接,则会出现此问题应用程序,或者您希望用户共享链接到您的GWT应用程序内的URL. (或者您的用户安装Chrome时,从Firefox中导入他们的书签,指向您的webapp中的特定位置,突然之前书签不起作用) 对于偏执狂,我会避免放任何?,#,&%,<或>您的历史记录字符串中的字符.但是,像orderDetails / oid = 12313378这样的字符串应该是很好的,并且跨浏览器.

(编辑以澄清我正在谈论的问题是处理在多个不同浏览器中使用相同的URL,而不是在各种浏览器中使用历史记录方法)

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...