GWT:如何使用(JSNI)提取javascript函数的内容

时间:2013-04-25 09:31:56

标签: gwt jsni

我使用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之外使用,所以我不能修改它。

我不知道为什么将part / gwt / core添加到导致问题的url中。 在执行javascript函数之前,是否有一种方法在gwt中提取其内容并在url之前添加“../ ..”? 我的意思是提升javascript函数名称,我们可以在调用execute函数之前获取它的内容吗?在我的情况下,我的javascript函数如下:

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

我需要在gwt客户端修改它并使用新的修改来调用它。

如果有人能帮助我,我感激不尽。

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试使用糟糕的方法解决问题。

更简单的方法是使用网址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有一组非常有限的正则表达式(/ path / *和* .ext),因此在您的情况下,您必须编写完整路径。