我正在开发一个GWT应用程序,需要将数据发送到远程认知服务器以运行一些报告。我使用本机javascript代码发送数据,但不知何故,cognos服务器没有收到所有数据,我们在URL中发送大数据作为参数。这是代码:
private static native void openReportWindow(String action, String uiObject, String reportName, String reportParams) /*-{
var form = document.createElement("form");
form.setAttribute("method", "POST");
form.setAttribute("action", action);
form.setAttribute("target", "reports");
var reportValues = new Array();
reportValues = reportParams.split('&');
for(var i=0;i<reportValues.length;i++) {
var tempArr = new Array();
tempArr = reportValues[i].split('=');
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", tempArr[0]);
hiddenField.setAttribute("value", tempArr[1]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
// open a new window to display the reports
window.open(action, 'reports', 'scrollbars=yes,menubar=no,height=600,width=800,resizable=yes,toolbar=no,status=no');
form.submit();
}-*/;
有更好的方法吗?
感谢所有帮助。
答案 0 :(得分:1)
您不应该使用JSNI来创建和提交表单。您可以使用完整的Java API执行此操作。
无论如何,如果你使用JSNI这样做,请确保使用$ doc而不是document和$ wnd而不是window来使用正确的窗口和文档对象。 (这与不同的引导加载程序和GWT以及代码的加载方式有关)有时窗口对象将指向子框架。 $ wnd和$ doc由编译器设置,并始终指向正确的。
请记住,没有必要去JSNI做你想做的事情......