我使用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客户端修改它并使用新的修改来调用它。
如果有人能帮助我,我感激不尽。
答案 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),因此在您的情况下,您必须编写完整路径。