GWT放置对象

GWT放置对象,gwt,browser-history,Gwt,Browser History,我是GWT的新手,所以这可能是一个愚蠢的问题,但我在任何地方都没有找到一个好的答案 那么,我应该如何在GWT中创建Place对象呢?我是否应该在ClientFactory中创建它们作为最终版本,并在任何地方重用它们? Eclipse生成一个字符串标记作为其参数的Place对象应该是什么 我的理解如下:我应该在ValueChangeHandler中为那些静态页面创建final Place对象,并在任何地方重用它们。那些相对动态的“场所”应该像 new MyCoolPlace("MyCoolPlac

我是GWT的新手,所以这可能是一个愚蠢的问题,但我在任何地方都没有找到一个好的答案

那么,我应该如何在GWT中创建Place对象呢?我是否应该在ClientFactory中创建它们作为最终版本,并在任何地方重用它们? Eclipse生成一个字符串标记作为其参数的Place对象应该是什么

我的理解如下:我应该在ValueChangeHandler中为那些静态页面创建final Place对象,并在任何地方重用它们。那些相对动态的“场所”应该像

new MyCoolPlace("MyCoolPlace" + someRandomNumber)
但每次我需要导航到新页面时,使用随机数不是有点愚蠢吗?我几个小时前创建的对象的历史也会被清除吗

目前,我在弄清楚这种机制是如何工作的方面遇到了一个问题: 我有一张表格。比如说,在数据库中添加蔬菜 1.用户填写它 2.提交 3.进入感谢页面 4.单击菜单中的链接以添加新蔬菜 5.获取该表单,但该表单已预先填充了用户以前输入的值


我需要在第五步把表格清理干净。但是,如果用户在步骤3中单击浏览器的后退按钮,我希望它是预填充的。

关于最终版本的问题:

我想不是。它们是轻量级对象,位置可以包含值。它们不是一组有限的位置值(至少如果将其参数化)

关于表单值的问题:

正常的行为是当你返回到——比方说——“vegForm”时,你获得了干净的视图(这是因为你的URL标记是简单的vegForm)。发生了什么我认为是您在重用视图而没有初始化。您的演示者(或任何具有UI逻辑的人)应该获得视图并调用“reset()”“init()”或任何您想要的

如果要在返回时保留值,应将其保存在place对象中。它是:字段值。您的PlaceTokenizer(在URL和Place对象之间转换的对象)应该处理它们。例如:
vegForm/potato,green,
(不记得标准符号)

问题是如何将单击“保存”之前输入的值保存到URL中

我要做的是在保存之前将该状态“保存”到URL中:

History.newItem("vegForm/potato,green,...", false);
这将进入历史堆栈。当我说false时,这意味着GWT历史机制不应该对URL做出反应,从而避免再次加载视图。当用户单击“上一步”时,她应该返回表单(带值)。如果您的用户再次单击“返回”,则她应返回表单(清除)

举例来说:

User clicks add veg -> #vegForm
User fills data and pless save
   -> #vegForm/value1,value2 (saved in History with false argument)
   -> #okPage

User clicks back
   -> #vegForm/value1,value2 (form with saved data)
User clicks back
   -> #vegForm (form without)
初始化

考虑到您始终必须初始化视图

  • 如果没有参数,则清除它(它可以是一个重用的视图)
  • 如果您有参数,请在表格中填写它们

哦,顺便说一句,请小心您输入到令牌中的值,我不知道GWT是否对其进行编码(如果不是,您应该手动对其进行编码)。你也应该注意长度。不要太长(我想限制是1024个字符,但我不确定)。