まるるん備忘録

プログラミングやインフラ等、IT技術に関して気付いた事を書いているブログです。

まるるん備忘録【Webアプリケーション開発】getParameterで上手く値が取得出来ない!?

JavaServletでリクエストからパラメータを取得する時、getParameterというメソッドを使いますよね。

ですがこのgetParameter、name属性をしっかりと引数に渡してあげても、nullを返す事があるのです。

以前その理由が分からず少し悩んだ事があったので、今回はその事について触れたいと思います。

今回使用するファイルは以下の通りです。

  • index.html
  • MakeQuizServlet.java
  • TeachAnswerServlet.java

少し量が多いので、各ファイルの中身は以下のURLに移しておきます。

これらはきちんと動作します。なので少しいじってnullという実行結果を出してみましょう。

 下記のようにソースコードを修正して下さい。いじった部分だけ色を変えています。


// 数が1桁なら、空白を多めに詰める
switch(formula[0]){
     case 1:
     case 2:
     case 3:
     case 4:
     case 5:
     case 6:
     case 7:
     case 8:
     case 9: out.println("<h2 name=formula1 value=" + formula[0] + ">&nbsp;&nbsp;&nbsp;&nbsp;" + formula[0] + "</h2>"); break;  // name属性を追加した
     default: out.println("<h2 name=formula1 value=" + formula[0] + ">&nbsp;&nbsp;"+ formula[0] + "</h2>"); break;  // name属性を追加した
        }

// 数が1桁なら、空白を多めに詰める
switch(formula[1]){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9: out.println("<h2 name=formula2 value=" + formula[1] + ">+&nbsp;&nbsp;" + formula[1] + "</h2>"); break;  // name属性を追加した
    default: out.println("<h2 name=formula2 value=" + formula[1] + ">+" + formula[1] + "</h2>"); break;  // name属性を追加した
}

    out.println("<hr>");
    out.println("<form action=teachanswerservlet method=POST>");
    out.println("<input type=text name=userAnswer value=0>");
//    out.println("<input type=hidden value="+ formula[0] + ">");  // name属性を除去した
//    out.println("<input type=hidden value="+ formula[1] + ">");  // name属性を除去した
    out.println("<input type=submit>");
    out.println("</form>");
    out.println("</body>");
    out.println("</html>");

 

 はい。name属性を<h2>タグの中に移しただけですね。なので普通に実行されそうですが……

ページが真っ白になってしまいますよね。どうしてそうなるのかと言うと、name属性が持つvalueを取得出来ないからです。

「……いやいや、name属性を<h2>タグの中に移しただけだし、valueだってきちんと設定しているじゃん!」と思われるかもしれませんが、getParameterで取得出来る値は「<input>タグのname属性が持つvalue属性の値」だけだからです

 今回のまとめ

  • getParameterで取得出来る値は<input>タグのname属性が持つvalue属性の値のみ