2010-10-29 177 views

回答

2

我们还使用Seam页面流和GWT的组合。明确地说,我们从主页面划分登录页面以启用通过https登录。但是,我们不使用普通的html页面,我们仍然使用xhtml页面。您可以通过用<f:view></f:view>对包裹<html></html>对包括Seam的XHTML页面内的GWT HTML页面:

<f:view 
    contentType="text/html" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:s="http://jboss.com/products/seam/taglib" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <html> 
     <!-- ... --> 
    </html> 
</f:view> 

通过使用这种缝包裹的HTML页面,你没有定义的页面过渡任何麻烦。

正如Peter Knego已经指出的那样,对不同的(x)html页面使用不同的GWT模块是可取的。

+0

你能帮我一个简单的例子,你的代码。 – 2010-10-29 13:27:24

+0

我特别感兴趣的是如何将页面流转换操作映射到gwt按钮操作 – 2010-10-29 13:32:50

+0

@Anand您无法将页面流映射到GWT按钮。 GWT客户端和Seam服务器之间的通信通过异步GWT-RPC调用。 Seam使用GWTService处理这些调用。正如@ z00bs和@Peter Knego指出的那样,使用GWT应用程序,您不会在不同的页面之间切换。我们使用Seam页面转换来决定我们的GWT应用程序的哪一部分被提供给客户端。如果客户端已经登录,我们渲染main.xhtml,否则返回home.xhtml。有关Seam + GWT的更多信息,请阅读http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/gwt.html – kraftan 2010-10-29 20:48:16

1

正常情况下,GWT是一个客户端有状态的应用程序。这意味着你在一个html页面中运行整个应用程序。浏览器不会重新加载此页面。如果浏览器将重新加载此页面,则内部应用程序状态将丢失(变量等)。

现在,您可以创建具有多个html页面的GWT应用程序。通常你会创建不同的GWT模块并将它们加载到不同的html页面中。 Eclipse插件为每个模块创建一个主页。

您可以创建普通的Seam应用程序,只需从GWT主机页面复制必要的行到您的Seam“页面”即可。

请记住,这个单独的GWT模块不共享它们之间的状态。

编辑:

可以Seam页面流GWT按钮映射,使得点击该按钮将在页面流下一页:

  1. 创建包含的onClick处理程序GWT按钮Window.Location.assign(URL)。点击此按钮将在当前浏览器页面打开给定的URL。
  2. 使Seam页面流页面的URL具有人类可读性。我相信(不是这方面的专家),它在<page>元素内完成view-id="page_url"属性。

这是一个手动过程(不是类型安全),它依赖于您将view-id与按钮中的URL正确匹配。一方的变化将需要您手动纠正另一方。 为了让生活更轻松一点,您可以创建一个将侦听器添加到Button(或GWT中的任何其他元素)的函数。

1

这很大程度上取决于你想要达到的目标。这就是说你是否打算创建一个类似桌面的桌面应用程序,其中大部分状态由客户端或主逻辑持有,并且html页面由服务器提供。

如果你喜欢桌面应用程序,你可能会完全用GWT构建你的应用程序的客户端。对于初始请求,Seam返回一个简单的html页面,该页面获取.nocache.js,该页面将下载已编译的主脚本.cache.html。从这里GWT接管(从加载模块的EntryPoint中的onModuleLoad()开始),并通过替换返回的html页面的<body>标记来构建应用程序的整个布局。用户交互和状态通过服务器同步,但渲染是由GWT完成的。

如果你选择Seam和JSF的组合,你仍然可以从GWT中受益。常见的情况是有选择地将GWT小部件插入到现有html页面的特定位置(详情请参阅here)。这样,您可以使用Seam进行渲染,页面流等,并使用GWT小部件扩展您的页面。

顺便说一句,如果您需要SSL进行注册和/或用户身份验证(并自动完成表单!),我强烈建议按照@kraftan的建议来执行此操作。其他一切都是痛苦的。