我正在玩GWT / GAE项目,该项目将有三个不同的“页面”,尽管它不是GWT意义上的页面。顶视图(每个页面一个)将具有完全不同的布局,但是一些小部件将被共享。
其中一个页面是由默认URL(http://www.site.com)加载的主页面,但另外两个页面需要额外的URL信息来区分页面类型。他们还需要一个名称参数,(如http://www.site.com/project/project-name。至少有两个我知道的解决方案。
首先看起来似乎很明显,但它有几个缺点。首先,用户应该能够轻松地记住并直接键入URL到项目。很难生成具有历史令牌的人性化URL。其次,我正在使用gwt-presenter,这种方法意味着我们需要在一个令牌中支持子位置,我宁愿避免。第三,用户通常会停留在一个页面上,因此页面信息是“静态”URL的一部分更有意义。
使用servlet解决了所有这些问题,但也创建了其他问题。
所以我的第一个问题是,这里最好的解决方案是什么?
如果我要使用servlet解决方案,会弹出新问题。
我也可以坚持使用一个模块,但GWT需要找出它应该显示的页面。它可以查询服务器或解析URL本身。
一个GWT模块+ servlet解决方案也会导致另一个问题。如果用户从项目页面进入主页面,那么GWT将如何知道这种情况发生了?该应用程序不会被重新加载,因此它将被视为一个简单的状态更改。每个州的变化都需要检查页面信息似乎相当无效。
任何人都想引导我走出我周围模糊的黑暗之中吗? : - )
答案 0 :(得分:3)
我会选择历史记录。这是处理此类情况的标准方法。我不明白,你的意思是“很难用历史令牌制作一个人性化的URL” - 它们对我来说似乎很人性化:)如果你使用servlet处理网址,我想这会导致整个页面需要重新加载 - 我认为你宁愿避免这种情况。
其次,我正在使用gwt-presenter和 这种方法意味着我们需要 在一个令牌中支持子位置, 我宁愿避免。
如果你对gwt-presenter不满意(就像我:),请推出自己的类来帮助MVP - 这很简单(你可以从头开始或修改gwt-presenter类)和你'我会得到一个适合您需求的解决方案。我之所以这么做,是因为gwt-presenter似乎对我来说“复杂”/复杂 - 对于泛型,当我需要的只是它提供(或尝试提供)的一部分时。
至于多个模块的想法 - 它是一个很好的,但我建议使用Code Splitting - 这种情况(页面/应用程序可以分为“独立”模块/块)正是它意味着用于,而且你只需要引导你的应用程序一次,因此在页面之间切换时不需要下载额外的代码。 Plus ,以这种方式共享状态应该更容易(例如,通过事件总线)。
答案 1 :(得分:-2)
根据您发布的内容,我认为您来自使用服务器端框架构建网站:JSP, JSF, Wicket, PHP
或类似的。 GWT不是构建基于页面的导航网站的解决方案,就像您使用上述框架一样。使用GWT,您可以在浏览器中加载Web应用程序并保留在那里。处理用户事件,与服务器通信并更新小部件;使用gwt-presenter
是一件好事,因为你不得不考虑控制器逻辑和视图状态的分离。
您可以真正利用GWT的所有功能来构建浏览器中的高性能应用程序,但它绝对不用于构建网站(使用通过服务器会话传输请求参数的超链接页面) )。
这是迄今为止关于GWT的最广泛问题@ StackOverflow :) “我如何在GWT中定义它们之间的页面和导航?”简短的回答:“你没有。”
使用Wicket,它可以在App Engine上运行,并且可以让您定义页面书签以及上面提到的所有内容。看这里:http://stronglytypedblog.blogspot.com/2009/04/wicket-on-google-app-engine.html