[英]Multiple “pages” in GWT with human friendly URLs
我正在玩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将如何知道这种情况发生了? 该应用程序不会被重新加载,因此它将被视为一个简单的状态更改。 检查每个状态变化的页面信息似乎相当无效。
有人想引导我走出我周围的雾气吗? :-)
我会选择历史记录。 这是处理此类情况的标准方法。 我不明白,你的意思是“很难用历史令牌制作一个人性化的URL” - 它们对我来说似乎很人性化:)如果你使用servlet处理网址,我想这会导致整个页面需要重新加载 - 我认为你宁愿避免的东西。
其次,我正在使用gwt-presenter,这种方法意味着我们需要在一个令牌中支持子位置,我宁愿避免。
如果你对gwt-presenter不满意(就像我:)),推出你自己的类来帮助MVP - 这很简单(你可以从头开始或修改gwt-presenter类)你会得到一个解决方案适合您的需求。 我之所以这么做,是因为gwt-presenter似乎对我来说“复杂”/复杂 - 对于泛型,当我需要的只是它提供(或试图提供)的一部分时。
至于多个模块的想法 - 这是一个很好的想法,但我建议使用Code Splitting - 这种情况(可以分为“独立”模块/块的页面/应用程序)就是它的意思。 ,此外,您只需引导您的应用程序一次,因此在页面之间切换时不会下载额外的代码。 另外 ,以这种方式共享状态应该更容易(例如通过事件总线)。
根据您发布的内容,我假设您来自使用服务器端框架构建网站: 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.