2013-04-25 52 views
0

我從GWT的客戶端使用JSNI像後續調用javascript函數:GWT:如何提取使用JavaScript函數的內容(JSNI)

anchor.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       execute(notification.getActionCode(), notification.getParams()); 
      } 
}); 

private static native String execute(String functionName, String params)/*-{ 
     try{ 
      $wnd[functionName](params); 
     }catch(e){ 
      alert(e.message); 
     } 
}-*/; 

我的問題是我的javascript函數包含窗口。開放( 「ServletName?......」)。 單擊錨點時,窗口打開時出現以下錯誤: 請求的資源(/ es/gwt/core/ServletName)不可用。

如果我通過window.open(「../../ ServletName?....」)替換window.open(「ServletName?....」),窗口打開成功,但是這些javascript函數也用在gwt之外,所以我不能修改它。

我不知道爲什麼part/gwt/core被添加到導致問題的url。 在執行javascript函數之前,在gwt中有沒有一種方法來提取它的內容並在url之前添加「../ ..」? 我的意思是heaving的JavaScript函數的名稱,我們可以得到它的內容之前調用執行功能?在我的情況,我的javascript函數是如下:

function everlinked_AddSpace(spaceId){ 
     window.open('ELUtilities?Service=Space&action=homePage&SpaceId='+spaceId+'&Template=apps/everlinked/templates/spaces/space_main.htm','_blank');; 
    } 

我需要修改它在GWT客戶端和新修改調用它。

我很感謝有人能幫助我。

+0

我已更新我的帖子。我希望它更清楚。我不知道這是否是正確的解決方案。如果您有任何更好的解決方案,我將不勝感激。 – user2318955 2013-04-25 10:09:54

+0

http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/core/client/GWT.html#getHostPageBaseURL() – 2013-04-25 10:16:18

+0

謝謝Baadshah的幫助。但我應該在哪裏使用方法getHostPageBaseURL() – user2318955 2013-04-25 10:52:27

回答

0

我認爲你正在嘗試用一種不好的方法來解決你的問題。

更簡單的方法是使用url re-writer或修改web.xml url-pattern以將gwt應用發送的相對路徑路由到同一個servlet。

也許你有你的web.xml是這樣的:

<servlet> 
    <servlet-name>myservlet</servlet-name> 
    <servlet-class>maynamespace.ServletName</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/ServletName</url-pattern> 
</servlet-mapping> 

所以,你可以將此塊添加到你的web.xml。

<servlet-mapping> 
    <servlet-name>myservlet</servlet-name> 
    <url-pattern>/es/gwt/core/ServletName</url-pattern> 
</servlet-mapping> 

注意url-pattern有一組非常有限的正則表達式(/路徑/ *和* .EXT),所以你的情況,你必須寫的完整路徑。