【问题标题】:What is the best way to allow page refresh in gwtp?在 gwtp 中允许页面刷新的最佳方法是什么?
【发布时间】:2013-06-17 08:54:02
【问题描述】:

我是 gwtp 的初学者,我想构建一个显示产品列表的应用程序,并通过单击显示所选产品的详细信息... 我的问题是如何刷新页面以允许在尊重安全措施的同时刷新页面产品详细信息,显然我不想在请求中传递产品的 id。 我曾考虑将 id 存储在会话中,但考虑到 RPC 的高响应时间,我不知道它是否会影响应用程序的性能。

对此的任何帮助或澄清将不胜感激。

【问题讨论】:

  • 您的问题到底是什么?您想知道如何在单击列表中的产品时显示详细信息页面,还是想知道如何在用户刷新浏览器时显示相同的详细信息页面(例如通过单击 F5)?
  • 我想知道当用户刷新浏览器并遵守安全措施时如何显示相同的详细信息页面,例如用户无法显示不属于的产品。

标签: gwt gwt-mvp gwt-platform gwt-places


【解决方案1】:

您可以考虑使用 GWT 的Cookie Support。如果实施得当,您将始终确切地知道他们最后在做什么,并且让他们回到那里变得容易。 Cookie 显然是客户端的,所以它总是比 RPC 快。

【讨论】:

  • 安全性怎么样?客户端可以更改cookies然后刷新页面细节以显示不属于的产品??
  • @user405458 规则#1:永远不要相信你从客户那里得到的任何东西。你应该假设他们确实改变了cookie。无论如何,您应该检查服务器端用户是否有权执行他们要求的操作。该规则也适用于客户端 javascript 要求的任何内容。您应该假设每个用户都是恶意用户,验证所有内容并且不信任任何内容。
【解决方案2】:

我有一些建议,但请注意,我对 GWTP 也很陌生......

安全

应通过 SSL/HTTPS 进行通信。我使用 servlet 容器 (web.xml) 将它放在整个应用程序中,以便它与我的应用程序的非 GWT 部分无缝集成。

我认为放置“id”in a url 没有问题。您可以随时使用PlaceManager.revealPlace(PlaceRequest, boolean) 阻止它显示在地址栏中。

合成视图

我有一个视图,左侧是实体列表,右侧是编辑表单。该列表始​​终显示并由父演示者明确放置在“插槽”中:

public class Users extends Presenter<Users.View, Users.Proxy> {
@ContentSlot
public static final GwtEvent.Type<RevealContentHandler<?>> LIST_SLOT = new GwtEvent.Type<RevealContentHandler<?>>();
@ContentSlot
public static final GwtEvent.Type<RevealContentHandler<?>> FORM_SLOT = new GwtEvent.Type<RevealContentHandler<?>>();
@Inject
private UserList userList;

@Inject
public Users(EventBus eventBus, View view, Proxy proxy) {
    super(eventBus, view, proxy, Configuration.SLOT);
}

@Override
protected void onReveal() {
    super.onReveal();
    setInSlot(LIST_SLOT, userList);
}
...

我的应用程序有一个“空表单”演示者,当未选择任何列表项时默认显示该演示者。这可以防止列表和父演示者成为“place”(需要token)。只有演示者层次结构中的叶演示者应该是一个“地方”。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多