【问题标题】:Java servlet not firing onSubmitComplete (Google app engine)Java servlet 未触发 onSubmitComplete(Google 应用引擎)
【发布时间】:2014-03-11 08:54:15
【问题描述】:

GWT 2.5.1/ App Engine SDK 1.8.9

我正在尝试将 .CVS 文件上传到要使用 FormPanel 解析的 servlet,但是我没有收到 servlet 的响应。

客户端代码

// Create a FormPanel and point it at a service
    final FormPanel form = new FormPanel();
    form.setAction(GWT.getModuleBaseURL() + "uploadServlet");
    System.out.println(GWT.getModuleBaseURL() + "uploadServlet");
            //gives me http:// . .  . /healthybc/uploadServlet

    // set form to use the POST method, and multipart MIME encoding
    form.setEncoding(FormPanel.ENCODING_MULTIPART);
    form.setMethod(FormPanel.METHOD_POST);
    form.setWidget(buttonPanel);


    final FileUpload fileUpload = new FileUpload();
    fileUpload.setName("Browse");
    buttonPanel.add(fileUpload);

    // Add a 'submit' button.
    Button submit = new Button("Submit");
    submit.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            form.submit();                              
        }
    });

    buttonPanel.add(submit);

    // Add an event handler to the form.
    form.addSubmitHandler(new FormPanel.SubmitHandler() {
        public void onSubmit(SubmitEvent event) {
            // This event is fired just before the form is submitted. We can take
            // this opportunity to perform validation.

            if (fileUpload.getFilename().length() == 0) {
                Window.alert("The text box must not be empty");
                event.cancel();
            }
            else if (!fileUpload.getFilename().endsWith(".csv")){
                Window.alert("Can only upload .csv files");
                event.cancel();
            }

        }
    });

    form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
        @Override
        public void onSubmitComplete(SubmitCompleteEvent event) {
          // When the form submission is successfully completed, this event is
          // fired. Assuming the service returned a response of type text/html,
          // we can get the result text here (see the FormPanel documentation for
          // further explanation).

          Window.alert(event.getResults());
        }
      });

我从 onSubmit() 得到窗口,但从 onSubmitComplete 没有响应。

web.xml

相关的 web.xml 代码

<servlet>
    <servlet-name>uploadedCSVParser</servlet-name>
    <servlet-class>ca.ubc.cs310.gwt.healthybc.server.UploadedCSVParser
    </servlet-class>
    </servlet>

<servlet-mapping>
    <servlet-name>uploadedCSVParser</servlet-name>
    <url-pattern>/healthybc/uploadServlet</url-pattern>
</servlet-mapping>

服务器代码

public class UploadedCSVParser extends HttpServlet{   
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
    doPost(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();


    out.println("<html>");
             out.println("<head>");
             out.println("<title> servlet title</title>");
             out.println("</head>");
              out.println("<body>");
              out.println("</body>");

         out.println("TEXT GOES HERE");

                out.println("</html>");
                out.close();


}

现在服务器代码就在那里,看看我是否真的得到了响应。 在我的浏览器(我使用的是 firefox)中直接输入 URL ...“/healthybc/uploadServlet”会给我预期的“TEXT GOES HERE”输出,但我没有收到任何迹象表明提交表单时 onSubmitComplete 曾经运行过。我开始认为信息永远不会到达 servlet。

我做错了吗?有什么简单的方法可以检查 servlet 是否真的被调用了?

【问题讨论】:

    标签: java google-app-engine servlets gwt


    【解决方案1】:

    我以某种方式修复了它。我从一个已知的工作模板重做了客户端,我认为它的顺序可能与我最初的顺序略有不同。

        final FormPanel form = new FormPanel();
        form.setMethod(FormPanel.METHOD_POST);
        form.setEncoding(FormPanel.ENCODING_MULTIPART);
        form.setAction("/healthybc/uploadServlet");
    
            // then there's a button they can click which calls form.submit();
        form.setWidget(new Button("Submit", (new ClickHandler() {
          @Override
          public void onClick(ClickEvent event) {
            form.submit();
          }
        })));
    
        buttonPanel.add(form);
    
        final FileUpload fileUpload = new FileUpload();
        fileUpload.setName("Browse");
        buttonPanel.add(clinicFileUpload);
    
        // Add an event handler to the form.
        form.addSubmitHandler(new FormPanel.SubmitHandler() {
            public void onSubmit(SubmitEvent event) {
                // This event is fired just before the form is submitted. We can take
                // this opportunity to perform validation.
    
                if (fileUpload.getFilename().length() == 0) {
                    Window.alert("The text box must not be empty");
                    event.cancel();
                }
                else if (!fileUpload.getFilename().endsWith(".csv")){
                    Window.alert("Can only upload .csv files");
                    event.cancel();
                }
    
            }
        });
    
        form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
            @Override
            public void onSubmitComplete(SubmitCompleteEvent event) {
              // When the form submission is successfully completed, this event is
              // fired. Assuming the service returned a response of type text/html,
              // we can get the result text here (see the FormPanel documentation for
              // further explanation).
              Window.alert(event.getResults());
            }
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-30
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 2021-01-18
      相关资源
      最近更新 更多