[英]JSNI function not recognized while calling from Servlet
有多個上載選項,調用相同的servlet進行處理。 我使用這些參數來區分來自GWT的調用,並在每次處理文件時設置響應。 reopnse很好,但是firebug調試器說它無法識別該功能
TypeError:window.parent.uploadCompleteXls不是一個函數
以下是用於設置響應的servlet代碼
public class UploadServlet extends HttpServlet {
.
.
setResponseXls(response,message)
}
public void setResponseXls(HttpServletResponse response, String message)
{
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
PrintWriter out;
try {
out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<script type=\"text/javascript\">");
out.println("window.parent.uploadCompleteXls('" + message + "');");
out.println("</script>");
out.println("</body>");
out.println("</html>");
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我在GWT類中編寫了JSNI方法,該方法擴展了窗口,如下所示。
private static native void initComplete(ProjectRunWindow uploadWindow) /*-{
$wnd.uploadCompleteXls = $entry(function(fileName) {
this.@com.citi.sevi.web.client.explorer.window.ProjectRunWindow::uploadCompleteXls(Ljava/lang/String;)(fileName);
});
}-*/;
public void uploadCompleteXls(String status) {
if (!status.equalsIgnoreCase("SUCCESS")) {
SC.say(status);
}
回應沒有回到GWT。 具有諷刺意味的是,在另一個擴展窗口的gwt類中確實使用了相同的語法。 它在其他班上的表現都很好!
我沒有看到其余的客戶端代碼,但希望您實際上調用了initComplete(ProjectRunWindow uploadWindow)
在DOM中創建$wnd.uploadCompleteXls
。 如果沒有,那就是問題所在。
我看到您的jsni方法有兩個問題。 一個是它被標記為靜態,就像在Java中一樣,您將無法訪問this
引用。 您可以使用console.log(this);
在您的靜態jsni方法中,您會看到它將打印出$ wnd全局對象。 如果要在jsni內部調用非靜態方法,則jsni方法需要為非靜態的。 第二個是如果您在回調函數中調用方法,則仍必須在回調之外為作用域添加一個本地var。 如果您在回調中執行console.log,您將看到它是您的內部函數,而不是對實際gwt類的引用。
private native void initComplete(ProjectRunWindow uploadWindow) /*-{
var self = this;
$wnd.uploadCompleteXls = $entry(function(fileName) {
this.@com.citi.sevi.web.client.explorer.window.ProjectRunWindow::uploadCompleteXls(Ljava/lang/String;)(fileName);
});
}-*/;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.