2

私は JSP ファイルで作業しています (サーブレットを使用したくない)、単純なフォーム、2 つのラベル、2 つの入力、2 つのボタンがあり、送信された文字列を同じ JSP ページに出力したい、問題新しい値を試しても、送信された最後の値が画面に表示されたままになるため、表示に移動する前に送信ボタンがクリックされたかどうかを確認するテストを考えました。次のコードを試しました。

       <body>
       <form  method='post'>
       <pre>
       <label>Username</label> <input type="text" name="user"  required/>
       <label>Password</label> <input type="password" name="pwd" required />
       <br>
       <input type="submit" value="confirm" name ="submit" /> 
       <input type="reset" value="clear"  /> 
       </pre>
       </form>
       <br>
       // test if the submit button was clicked (check if value of submit is confirm)

        <% String x=request.getParameter("submit")%>
        <% if (x.equals("confirm")){ %>

       <% if (request.getParameter("user")!="" && request.getParameter("pwd")!=""){ %>
       <center>
       <h4> user is : <% out.write(request.getParameter("user")); %> </h4>
       <br> 
       <h4> password is : <% out.write(request.getParameter("pwd")); %> </h4>
       </center>
       <% } else {  %>

        <h4> inputs r empty !! </h4> 

       <% } %>
       <% } %>
       </body>

次の行でエラーが発生します。

       <% if (x.equals("confirm")){ %>

なぜですか?

4

2 に答える 2

0

まず、不必要に JSP タグを開いたり閉じたりするのをやめます。そのずさんで読めない。次に、セミコロンがありません。3 番目に、パラメーターが null である可能性を確認する必要があります。フォームが送信されなかった場合、パラメーターは null です。

これは悪いです:

 <% String x=request.getParameter("submit")%>
 <% if (x.equals("confirm")){ %>

次のようにします。

 <%
   String x = request.getParameter("submit");
   if(x!=null && x.equals("confirm"))
   {
     ...

文字列比較を逆にすることもできます。null の変数にドット演算子を使用すると、null ポインター例外が発生します。したがって、文字列リテラルでドット演算子を使用して、null を明示的にチェックすることを避けることができます。

 <%
   String x = request.getParameter("submit");
   if("confirm".equals(x))
   {
     ...

また、これを修正すると、 で問題が発生しif (request.getParameter("user")!=""ます。.equals()Java for String==では、!=文字列の内容を比較するのではなく、ポインター (つまり、メモリアドレス) の等価性を比較するため、使用する必要があります。

于 2014-03-27T20:44:55.743 に答える