0

我正在使用 JSNI 从 gwt 客户端调用 javascript 函数,如下所示:

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 函数包含 window.open("ServletName?....")。单击锚点时,打开的窗口显示以下错误: 请求的资源 (/es/ gwt/core /ServletName) 不可用。

如果我将 window.open("ServletName?....") 替换为 window.open("../../ServletName?...."),则窗口打开成功,但这些 javascript 函数也在外部使用gwt 所以我不能修改它。

我不知道为什么将 /gwt/core 部分添加到导致问题的 url 中。在执行 javascript 函数之前,gwt 中是否有办法提取其内容并在 url 之前添加“../..”?我的意思是提升 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 客户端修改它并用新的修改调用它。

如果有人可以帮助我,我将不胜感激。

4

1 回答 1

0

我认为您正在尝试使用不好的方法来解决您的问题。

更简单的方法是使用 url re-writer或修改 web.xmlurl-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它的正则表达式集非常有限(/path/* 和 *.ext),因此在您的情况下,您必须编写完整路径。

于 2013-04-26T06:19:06.703 回答