Java GWT:如何从FormPanel获得提交结果

Java GWT:如何从FormPanel获得提交结果,java,gwt,Java,Gwt,这个例子说: “…假设服务返回的响应类型为text/html,我们可以在此处获得结果文本(有关详细说明,请参阅FormPanel文档)。” 然而,javadoc没有对这个主题做任何解释。是否有人发现如何在表单提交后从服务器返回HTML响应?将表单处理程序添加到FormPanel中,在onSubmitComplete中,您将收到一个FormSubmitCompleteEvent。调用其getResults()方法以获取结果 form.addFormHandler(new FormHandler()

这个例子说:

“…假设服务返回的响应类型为text/html,我们可以在此处获得结果文本(有关详细说明,请参阅FormPanel文档)。”


然而,javadoc没有对这个主题做任何解释。是否有人发现如何在表单提交后从服务器返回HTML响应?

将表单处理程序添加到FormPanel中,在onSubmitComplete中,您将收到一个FormSubmitCompleteEvent。调用其getResults()方法以获取结果

form.addFormHandler(new FormHandler() {
    public void onSubmit(FormSubmitEvent event) { // validation etc }

    public void onSubmitComplete(FormSubmitCompleteEvent event} {

         Window.alert(event.getResults()); // display the result
    }

};

//============在客户端:

SubmitCompleteHandler sch = new SubmitCompleteHandler()
{
    public void onSubmitComplete(SubmitCompleteEvent event) 
    {
    //get back the data results that had input the .xml 
    String dpsString = event.getResults();

    //And do your wanted action with the result
    System.out.println(dpsString);
    }
};
uploadForm.addSubmitCompleteHandler(sch);   
FormPanel formPanel = new FormPanel();
            FormElement.as(formPanel.getElement()).setAcceptCharset("UTF-8");
formPanel.setAction(sb.toString());
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setVisible(false);
RootPanel.get().add(formPanel);
formPanel.submit();
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler()     {                  
@Override
    public void onSubmitComplete(SubmitCompleteEvent event) {
        String results = event.getResults();
    }
});
//============在服务器端:

// parse and handle file, e.g. if there is an xml file
...
InputStream fileImputStream = uploadItem.getInputStream();
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(fileInputStream);
doc.getDocumentElement().normalize();
System.out.println("Root element of the doc is " + doc.getDocumentElement().getNodeName());
...
//Response to the request with the result  
dpsString = doc.getDocumentElement().getNodeName();
response.getWriter().write(new String(dpsString)); 
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(e.getMessage()); 

以下是“Robert Munteanu”中的answear,您应该看看:

在那里你可以看到:

获得结果

public java.lang.String getResults()

获取表单提交的结果文本

返回:

结果为html,如果读取时出错,则为null

提示:


将表单提交到其他域后,结果html可能为空

此问题仅在调试模式下发生。查看此信息:

我尝试用机器名替换本地主机,但没有帮助(有些人说这对他们有帮助),但这是一个跨域java脚本问题,因此我尝试使用web xml中指定的URL模式,并得到了一个字符串结果。有关详细信息,请查看此链接中的答案


我能够通过以下代码在开发模式下获得结果消息:

客户端:

SubmitCompleteHandler sch = new SubmitCompleteHandler()
{
    public void onSubmitComplete(SubmitCompleteEvent event) 
    {
    //get back the data results that had input the .xml 
    String dpsString = event.getResults();

    //And do your wanted action with the result
    System.out.println(dpsString);
    }
};
uploadForm.addSubmitCompleteHandler(sch);   
FormPanel formPanel = new FormPanel();
            FormElement.as(formPanel.getElement()).setAcceptCharset("UTF-8");
formPanel.setAction(sb.toString());
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setVisible(false);
RootPanel.get().add(formPanel);
formPanel.submit();
formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler()     {                  
@Override
    public void onSubmitComplete(SubmitCompleteEvent event) {
        String results = event.getResults();
    }
});
服务器端:

// parse and handle file, e.g. if there is an xml file
...
InputStream fileImputStream = uploadItem.getInputStream();
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(fileInputStream);
doc.getDocumentElement().normalize();
System.out.println("Root element of the doc is " + doc.getDocumentElement().getNodeName());
...
//Response to the request with the result  
dpsString = doc.getDocumentElement().getNodeName();
response.getWriter().write(new String(dpsString)); 
response.setContentType("text/html");
response.setHeader("Pragma", "No-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(e.getMessage()); 

浏览器:Firefox 24.3.0,GWT版本:2.5.1

对我来说,问题是我用
FormPanel(String)
构造函数构建了
FormPanel
。使用默认构造函数,我的
SubmitCompleteHandler
刚刚工作。

对我不起作用。在Mac上的GWT 1.6上调用event.getResult()时返回null。是否确实从文件上载中返回了一些内容?也就是说,如果您将其传递给servlet,请使用response.getOutputStream().write(“Works!”);response.getOutputStream().flush();这是正确的答案。在
Dev模式下
event.getResult()
始终为
null