繁体   English   中英

GWT中的多个“页面”,带有人性化的URL

[英]Multiple “pages” in GWT with human friendly URLs

我正在玩GWT / GAE项目,该项目将有三个不同的“页面”,尽管它不是GWT意义上的页面。 顶视图(每个页面一个)将具有完全不同的布局,但是一些小部件将被共享。

其中一个页面是由默认URL( http://www.site.com )加载的主页面,但另外两个页面需要额外的URL信息来区分页面类型。 他们还需要一个名称参数,(例如http://www.site.com/project/project-name 。至少有两个我知道的解决方案。

  1. 使用GWT历史记录机制,让页面类型和参数(例如项目名称)成为历史记录标记的一部分。
  2. 使用带有url映射模式的servlet(比如/ project / *)

第一种选择起初可能看起来很明显,但它有几个缺点。 首先,用户应该能够轻松地记住并直接键入URL到项目。 很难生成具有历史令牌的人性化URL。 其次,我正在使用gwt-presenter,这种方法意味着我们需要在一个令牌中支持子位置,我宁愿避免。 第三,用户通常会停留在一个页面上,因此页面信息是“静态”URL的一部分更有意义。

使用servlet解决了所有这些问题,但也创建了其他问题。

所以我的第一个问题是,这里最好的解决方案是什么?

如果我想使用servlet解决方案,会弹出新问题。

  1. 将GWT应用程序拆分为三个独立的模块可能是有意义的,每个模块都有一个入口点。 映射到某个页面的每个servlet然后将该请求简单地转发到处理该页面的GWT模块。 由于用户通常停留在一个页面,因此浏览器只需要加载该页面的js。 根据我所读到的,这个解决方案并不是真正推荐的。

我也可以坚持使用一个模块,但是GWT需要找出它应该显示的页面。 它可以查询服务器或解析URL本身。

  1. 如果我坚持使用一个GWT模块,我需要将页面信息保存在服务器端。 当然我考虑过会议,但我不确定将页面信息与用户数据混合是否是一个好主意。 会话通常存在于用户登录和注销之间,但在这种情况下,它需要不同的行为。 通过会话处理这个是不好的做法吗?

一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM