2010-10-29 167 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的建議來執行此操作。其他一切都是痛苦的。