【问题标题】:GWT: How to extract a content of a javascript function using (JSNI)GWT:如何使用(JSNI)提取 javascript 函数的内容
【发布时间】:2013-04-25 09:31:55
【问题描述】:

我正在使用 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 客户端修改它并使用新的修改调用它。

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

【问题讨论】:

  • 我更新了我的帖子。我希望它更清楚。我不知道这是否是正确的解决方案。如果您有更好的解决方案,我将不胜感激。
  • 感谢 Baadshah 的帮助。但我应该在哪里使用方法 getHostPageBaseURL()
  • 我的jsni方法是包含要修改的url的方法。如果我通过 GWT.get...URL() 获取基本 url,我如何将它包含在我的 jnsi 方法中?
  • 要么将其作为方法的参数传递,要么使用 JSNI 语法从 JS 调用它:@com.google.gwt.core.client.GWT::getHostPageBaseURL()

标签: gwt jsni


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多