- 締切済み
getParameter()について
getParameter()を使ってフォームからの送信をservletに渡し処理するプログラムを作っているのですが、うまくいきません、誰か教えていただけないでしょうか 問題となる部分は String name = getParameter("name"); if(name != null){ 処理1 }else{処理2} フォームからの入力が無い場合処理2をしたいのですが、うまくいかないのです。(入力ななくても処理1をしちゃうんです) どこが間違っているのでしょうか?教えてください。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
こんにちわ。 えーと画面で何も入力しなかったら、という条件を != null でやっていらっしゃるようですが、 条件が間違っている可能性があります。 0サイズの文字列が入ってる可能性があります。 そのため、条件を if (name != null && name.length > 0)という条件に変更してみてはいかがでしょうか? まず、デバッグかなにかをして、画面入力がなかった場合、nameに何か値が入ってるかどうか?調べてみるべきです。
- ssr-y6
- ベストアンサー率71% (5/7)
getParameter()の返り値は、パラメータが設定されていない場合にnullになり、 パラメータが設定されている場合はその値になります。 パラメータが空(name=)の場合は、空文字列("")が帰ってきます。 以下の例では、テキスト領域に何か入れて1ボタンを押せばそれが取得でき、 何も入れなければ空文字列が取得できます。 2ボタンを押すとパラメータが設定されていないのでnullが取得されます。 -----サーブレット----- import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class parameter extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { try { res.setContentType("text/html"); PrintWriter PW = res.getWriter(); PW.println("<html><head><title>name is ..</title></head>"); PW.println("<body><h1>"); String name = req.getParameter("name"); if (name != null) { if (name.compareTo("") == 0) PW.println("name is empty"); else PW.println("name is " + name); } else PW.println("name is null"); PW.println("</h1><br></body></html>"); } catch (Exception ex) { System.out.println(ex.toString()+ "::Get"); }; }; } -----ページHTML----- <html> <head><title>Data Input Page</title></head> <body> <form action="http://localhost:8080/minnaservlet/500330"> <input type="submit" value="1"> <input type="text" name="name" value=""> </form> <hr> <form action="http://localhost:8080/minnaservlet/500330"> <input type="submit" value="2"> </form> </body> </html>
- thelma
- ベストアンサー率66% (20/30)
元のご質問とは直接関係ありませんが、、、 equalsメソッドは、オブジェクトが保持する「値の一致」を調べる目的のメソッドです。 値の一致を調べるのに、単純にオブジェクトが同じかどうか==で比較するのか、それとも特別な比較ロジックを使うのかは、メソッドの実装によります。 Objectクラスのequalsメソッドの実装(つまり、equalsメソッドを特別に定義しない場合のデフォルト)は、==によるオブジェクトの比較です。 ObjectクラスのJavadocを読むと、equalsメソッドの比較について細かく書かれています。
- A__
- ベストアンサー率47% (22/46)
また間違えていました。 java.lang.Stringクラスでは、equalsメソッドは内容の一致だけど、 他のクラスでは、equalsメソッドはオブジェクトの一致を調べる場合も あるみたいです。 クラスによって、equalsメソッドの比較が内容だったりオブジェクト だったりするみたいです。
- A__
- ベストアンサー率47% (22/46)
name というオブジェクトの内容を "abc" と比較する場合が name.equals("abc") です。ごめんなさい pmoji は間違いです。 equals というメソッドは内容が一致すれば、オブジェクトの 一致に関わらず、真です。 オブジェクトの一致を調べる場合は == を使います。
- A__
- ベストアンサー率47% (22/46)
if(name != null){ ↓ if(!pmoji.equals("")){ getParameter("name");゛で、name に対する value が指定 されていなくても、name = "" という空の文字が入って name は null とは違ったものになるみたいです。 equals() を使えば、空の文字なのか、そうでないのか判別できます。 int変数を用意すれば length() で if(len > 0){ とやって 判別することもできます。
- yuji
- ベストアンサー率37% (64/169)
nameの値は何が入ってきていますか? System.out.println("name=" + name); などで出力してみてください。 ""がもし入っていたら if (name != null && !"".equals(name)) { とかにすればいいのではないでしょうか?
お礼
やっぱりそうですか、自分もそういう風に考えていましたが。。。 けどequalsメソッドってオブジェクトを比較するときに使うメソッドじゃないですか? オブジェクトの内容まで調べられるの? Aさんの教えとおりにやってみたらうまくいきました ありがとうございます!