4

私はこの問題が非常に困惑している (しかし興味深い) ことを発見したので、ここにいる人々に洞察を求めたいと思います。

私は JSP と関連技術を独学で学んできました。私がやろうとしているのは、JSP からサーブレットにパラメーターを取得し、If() で使用することです。これが私のコーディングの一部です。

if ((request.getParameter("ID_A") != null || request.getParameter("Password_A") != null) &&
    (request.getParameter("ID_B") != null || request.getParameter("Password_B") != null)) {

        errorMessage = "Information is detected for the both side";
        request.setAttribute("errorMessage", errorMessage);
        request.getRequestDispatcher("4_enter_personal_info.jsp").forward(request, response);
    } // Other conditions...

これはJSPの一部です(前のステップ)

<form action="PersonalInfor_to_confirmation_servlet" method="POST">
    <h2>For an existing customer</h2>
        <p>Customer ID</p>
        <input type="text" name="ID_A" value="" />
        <p>Password</p>
        <input type="text" name="Password_A" value="" />
        <br>
    <h2>For a new customer</h2>
        <p>Set your customer ID</p>
        <input type="text" name="ID_B" value="" />
        <p>Set your password</p>
        <input type="text" name="Password_B" value="" />
    //There are other lines
</form>

クライアントが両側に情報を入力した場合 ( )、 JSPFor an existing customer/For a new customerに上記のメッセージが表示されるようにしています。"Information is detected for the both side"

ただし、すべてのテキスト ボックスが空白であっても、エラー メッセージが表示されます。したがって、request.getParameter( )上記のすべてのメソッドには、空にしても null 値は含まれません。

他のアルゴリズムを思いついたとしても、この現象が起こる理由を知りたいです。

アドバイスをいただければ幸いです。

4

2 に答える 2

6

ifブロック内のステートメントが実行される理由は、フィールドが存在するためです。テキストボックスが空のときに実行したくない場合は、次のようなパラメーターに空の文字列が含まれているかどうかのチェックを条件に含める必要があります。

request.getParameter("ID_A") != null && !request.getParameter("ID_A").isEmpty()
|| request.getParameter("Password_A") && !request.getParameter("Password_A").isEmpty()
...

したがって、上記のすべての request.getParameter( ) メソッドには、空にしても null 値は含まれません。

はい。getParamater()が値を返す場合null、フォーム内にその名前のフィールドが見つからないことを意味します。別の方法を使用してください:isEmpty()フィールドが空かどうかを確認します。そのような:

request.getParameter("noSuchField")==null //true
request.getParameter("ID_A")==null //false
request.getParameter("ID_A").isEmpty() //true
于 2015-01-13T01:01:35.107 に答える
2
<input type="text" name="ID_A" value="" />

この方法でフォームを送信するとID_A、キーとして and ""(空の文字列) が値になります。null を取得する方法はID_A、値を指定してまったく送信しないことです。

これを回避する良い方法は、空の文字列を明示的にチェックすることです:

private boolean isNullOrBlank(final String s) {
    return s == null || s.trim().length() == 0;
}

if ((isNullOrBlank(request.getParameter("ID_A"))||
     isNullOrBlank(request.getParameter("Password_A"))
    ) &&
    (isNullOrBlank(request.getParameter("ID_B"))|| 
     isNullOrBlank(request.getParameter("Password_B")))) {
 ...
}
于 2015-01-13T01:01:44.763 に答える