2011-06-21 44 views
3

我想在GWT中提交FormPanel時調用一個servlet。我在form.setAction(「myurl」)上設置了url,並且在web.xml上做了映射,形式suvmit servlet的不called.Here是代碼:在gwt中提交formpanel時調用servlet

public class MainEntryPoint implements EntryPoint { 

    public void onModuleLoad() { 
     AbsolutePanel panel=new AbsolutePanel(); 
     FileUpload upload = new FileUpload(); 
     upload.setName("file"); 
     final FormPanel form = new FormPanel(); 
     form.setWidget(panel); 

form.setMethod(FormPanel.METHOD_POST); 
form.setEncoding(FormPanel.ENCODING_MULTIPART); 

form.setAction("/NewServlet"); 

RootPanel.get().add(new Label("path="+GWT.getModuleBaseURL()+"/NewServlet")); 

Button sub=new Button("Submit"); 
    sub.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
       RootPanel.get().add(new Label("In click event submiting form")); 
       try{ 
       form.submit(); 
       }catch(Exception e){RootPanel.get().add(new Label(e+""));} 

     }}); 

     form.addFormHandler(new FormHandler() { 
     public void onSubmit(FormSubmitEvent event) { 
     // This event is fired just before the form is submitted. We can take 
     // this opportunity to perform validation. 
       RootPanel.get().add(new Label("On submit")); 
     } 

     public void onSubmitComplete(FormSubmitCompleteEvent 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). 
       RootPanel.get().add(new Label("On submiting complete")); 
     } 
    }); 



panel.add(upload); 
panel.add(sub); 

RootPanel.get().add(form); 

    } 

} 

這裏是web.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>upload</servlet-name> 
     <servlet-class>org.fileup.client.UploadServlet2</servlet-class> 
    </servlet> 
    <servlet> 
     <servlet-name>NewServlet</servlet-name> 
     <servlet-class>NewServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>upload</servlet-name> 
     <url-pattern>/uploadservlet2</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>NewServlet</servlet-name> 
     <url-pattern>/NewServlet</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>welcomeGWT.html</welcome-file> 
    </welcome-file-list> 
</web-app> 

而且NewServlet.java

public class NewServlet extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 
     try { 
      // /* TODO output your page here 
      out.println("<html>"); 
      out.println("<head>"); 
      out.println("<title>Servlet NewServlet</title>"); 
      out.println("</head>"); 
      out.println("<body>"); 
      out.println("<h1>Servlet NewServlet at " + request.getContextPath() + "</h1>"); 
      out.println("</body>"); 
      out.println("</html>"); 

     } finally { 
      out.close(); 
     } 
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
    /** 
    * Handles the HTTP <code>GET</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Handles the HTTP <code>POST</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    /** 
    * Returns a short description of the servlet. 
    * @return a String containing servlet description 
    */ 
    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    }// </editor-fold> 

} 

請告訴我如何在提交FormPanel時調用NewServlet。

回答

4

或者作爲替代,你可以使用:form.setAction("NewServlet");

8

你可能想form.setAction(GWT.getHostPageBaseURL() + "NewServlet")

+0

您需要在NewServlet之前使用斜槓 –

+3

否,'GWT.getHostPageBaseURL()'保證以斜線結尾。證明:http://code.google.com/p/google-web-toolkit/source/browse/releases/2.3/user/src/com/google/gwt/core/client/impl/Impl.java#81(對於'GWT.getModuleBaseURL()'也是如此,btw) –

0

非常類似的代碼,用你的確切的setAction聲明,對我的作品。問題可能是

<servlet-class>NewServlet</servlet-class> 

遺漏了虛線路徑,例如, org.fileup.server.,NewServlet。