2012-01-03 12 views
2

GETリクエストからフォームパラメータを取得しようとしています。 htmlコードは以下の通りです。Java ServletのHttpServletRequestパラメータがnullとして表示される

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     <title>DesignMatch. Matching the best clients and best designers.</title> 
     <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
     <script type="text/javascript" src="jquery.backstretch.js"></script> 
     <script type="text/javascript" src="design_match.js"></script> 
     <link rel="stylesheet" type="text/css" media="all" href="design_match.css" /> 
    </head> 
    <body> 
     <div id="matte_bg"></div> 
     <div id="entire_wrapper"> 
      <div class="divModule" id="section_head_1"> 
       <p class="primaryPageText"> 
        Clients 
       </p> 
       <div class="url-bar"> 
        <form name="clientUrls" action="SaveDatabase2" target="_blank" method="get"> 
         <input type="text" class="url-box" id="url-box1" name="name1" size="20" value="Paste a link to a website that has the design qualities you want."> 
         <a id="add-url" href="#">Add</a> 
         <a id="del-url" href="#">Remove</a> 
        </form> 
       </div> 
      </div> 
      <div class="divModule" id="section_head_2"> 
       <p class="primaryPageText"> 
        Designers 
       </p> 
       <div class="portfolio-bar"> 
        <form name="designerUrls" action="SaveDatabase2" target="_blank" method="get"> 
         <input type="text" class="portfolio-box" id="portfolio-box1" name="name1" size="20" value="Paste a link to a website you designed."> 
         <a id="add-portfolio" href="#">Add</a> 
         <a id="del-portfolio" href="#">Remove</a> 
        </form> 
       </div> 
      </div> 
      <div class="divModule"> 
       <div class="filterSentence"> 
        <ul class="primaryPageText"> 
         <li> 
          &nbsp; To me, &nbsp; 
         </li> 
         <li class="budgetTypeFilter"> 
          <a href="#" id="budgetToggle">[what price]</a> 
          <div id='budgetFilter' style="display:none" class="budgetTypeMenu"> 
           <a href="/500-under">$500 and under</a> 
           <a href="/500-to-1000">$500-$1,000</a> 
           <a href="/1000-to-2500">$1,000-$2,500</a> 
           <a href="/2500-to-5000">$2,500-$5,000</a> 
           <a href="/5000-to-7500">$5,000-$7,500</a> 
           <a href="/7500-to-10000">$7,500-$10,000</a> 
           <a href="/10000-above">Over $10,000</a> 
          </div> 
         </li> 
         <li> 
          &nbsp; seems fair to pay for &nbsp; 
         </li> 
         <li class="budgetTypeFilter"> 
          <a href="#" id="typeToggle">[what type of]</a> 
          <div id='typeFilter' style="display:none" class="budgetTypeMenu"> 
           <a href="/basic">a basic (e.g., front-end only)</a> 
           <a href="/dynamic">a dynamic (e.g., a little back-end)</a> 
           <a href="/sophisticated">a sophisticated (e.g., lots of back-end)</a> 
          </div> 
         </li> 
         <li> 
          &nbsp; website. &nbsp; 
         </li> 
        </ul> 
       </div> 
      </div> 
      <div class="divModule contact-bar" id="contact"> 
       <form name="nameForm" action="SaveDatabase2" target="_blank" method="get"> 
        <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name."> 
       </form> 
       <form name="contactForm" action="SaveDatabase2" target="_blank" method="get"> 
        <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever)."> 
       </form> 
      </div> 
      <div id="submit"> 
       <form accept-charset="UTF-8" action="SaveDatabase2" method="get"> 
        <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" /> 
       </form> 
      </div> 
     </div> 
    </body> 
</html> 

以下はサーブレットコードです。 doPostで取得したパラメータ値はnullです。私はhtmlで投稿するすべてのget要求を変更しようとしましたが、それは助けにはなりませんでした。 doGet関数はdoPostに再ルーティングされます。私が今興味を持っている主な2つのパラメータは、htmlの最後にある "contact_form"と "name_form"のパラメータです。再度、感謝します!

package web; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import com.mysql.jdbc.StringUtils; 
import java.sql.*; 
import java.io.*; 
import java.util.*; 

/** 
* Servlet implementation class SaveDatabase2 
*/ 
public class SaveDatabase2 extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public SaveDatabase2() { 
     super(); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doPost(request, response); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     out.println("<h1> Thank You </h1>"); 

     //Get Info for Database  
     int designer=0; 
     String clientType=""; 
     String name= ""; 
     String email=""; 
     //Get parameters to put into database 
     Enumeration parameterNames = request.getParameterNames(); 
     if ((request.getParameter("designerUrls")!=null) && !request.getParameter("designerUrls").matches(".*\\w.*")){ 
      designer=1; 
     } 
     if (designer==1){ 
      clientType="designer"; 
     }else clientType="client"; 

     name= request.getParameter("name_form"); 
     email=request.getParameter("contact_form"); 

} 
+0

なぜ多くの

タグがありますか?ただ1つのフォームタグ内にすべての入力フィールドを入れるだけです。 – Manish

+0

ありがとうございました。誰かがフロントエンドをやったので、バックエンドに接続しようとしていたので、htmlに何も問題がないと仮定しました。私はそれを1つのフォームに変更し、それが動作するかどうかを確認します。 –

答えて

3

まず第一に、私はあなたが2つの異なる方法としてdoPostdoGetを残すべきだと思います。フォームのmethod属性をpostに設定すると、doPostが自動的にトリガーされます。

また、フォームは次のようにする必要があります:name_formcontact_form:あなたの質問に

<form name="myForm" accept-charset="UTF-8" action="SaveDatabase2" target="_blank" method="post"> 
    <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name."> 
    <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever)."> 
    <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" /> 
</form> 

、ボタンは2つの入力テキストフィールドが含まれていない独自の形である提出します。だからあなたはnullの値を持っています。

+0

あなたの迅速な返信にとても感謝します。私はこれらの変更をフォームに入れます –

+0

@TimnitGebruよろしくお願いします! :) –

0

あなたは、<form>要素を誤解していると思います。ページからサーブレットにデータを送信するには、method="get"またはmethod="post"を使用できますが、どちらもデータを片方向(クライアントからサーバー)に送信します。違いのためとWhen do you use POST and when do you use GET?

<form>が多く<input> Sを包含することができます参照してくださいしかし、あなたのコードから欠落している重要な部分は、(<input type="submit"/>と一つに)提出された<form><input>要素のいずれかが含まれていないということですあなた期待している。彼らは提出されていない他の<form>にあります。 サブミットボタンを含む<form>のみが送信されます。

すべてのフィールドと送信ボタンの周りに1つの<form>を使用する必要があります。

関連する問題