【问题标题】:GWT Place objectsGWT 放置对象
【发布时间】:2011-09-21 19:29:28
【问题描述】:

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

那么,我应该如何在 GWT 中创建 Place 对象?我应该在我的 ClientFactory 中将它们创建为 final 并在任何地方重用它们吗? Eclipse 生成的 Place 对象吃一个字符串标记作为它们的参数应该是什么?

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

那样创建
new MyCoolPlace("MyCoolPlace" + someRandomNumber)

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

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

我需要在第 5 步清理表单。但如果用户在第 3 步单击浏览器的后退按钮,我希望它被预先填写。

【问题讨论】:

    标签: gwt browser-history


    【解决方案1】:

    关于决赛的问题:

    我认为不会。它们是轻量级的对象,并且位置可以在其中包含值。它们不是一组有限的位置值(至少如果您将它们参数化)。

    关于表单值的问题:

    正常的行为是当你回到 - 让我们说 - “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 个字符,但我不确定)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多