2013-04-25 95 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),所以你的情况,你必须写的完整路径。