2015-01-13 5 views
2

이 문제가 너무 복잡해서 (흥미 롭습니다) 사람들에게 통찰력을 요청하고 싶습니다.request.getParameter에 예상 한 값이 null이 아닙니다.

저는 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> 

나는 클라이언트가 양쪽에 대한 정보 (For an existing customer/For a new customer)를 입력 할 때,을 보장하기 위하여 트링있어되면,이 나타납니다 JSP 위의 메시지 "Information is detected for the both side" 위.

그러나 모든 텍스트 상자가 비어 있어도 오류 메시지가 나타납니다. 위의 모든 request.getParameter() 메서드는 null 값을 포함하지 않으므로 값을 비워 두어도됩니다.

다른 알고리즘을 생각해 낼 수 있다고해도이 현상이 발생하는 이유를 알고 싶습니다.

모든 조언을 주시면 감사하겠습니다.

+0

관련 : http://stackoverflow.com/questions/7109419/what-is-the-best-practice-for-

이 주위에 좋은 방법은 명시 적으로 빈 문자열을 확인하는 것입니다 validating-parameters-in-jsp/ – BalusC

답변

4

if 블록의 문장이 실행되는 이유는 필드가 있기 때문입니다.

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

그래서 모든 요청 : 글 상자가 비어있을 때 당신이 그것을 실행하지 않으려면 매개 변수가 빈 문자열, 같은 포함 된 경우 당신이해야 할 것은 당신의 상태에 체크를 포함한다. 위의 getParameter() 메소드에는 null을 포함하지 않더라도 null 값 이 포함되어 있지 않습니다.

예. getParamater()null 값을 반환하면 해당 이름의 양식에서 필드를 찾을 수 없음을 의미합니다. 필드가 비어 있는지 확인하려면 isEmpty() 다른 방법을 사용하십시오. 예를 들면 : 양식이 방법을 제출하면

request.getParameter("noSuchField")==null //true 
request.getParameter("ID_A")==null //false 
request.getParameter("ID_A").isEmpty() //true 
+0

정말 고마워요. 이 방법은 간결하고 아마도 가장 좋은 것으로 보입니다. 그래서, JSP의 세계에서, null은 공백과 다릅니다 ... 맞습니까? – Hiroki

+1

@YMD, 예. 'null'과 빈 문자열은 완전히 다릅니다. 폼에있는 모든 필드는 제출 될 때'null '이 아니며 기본적으로 빈 문자열' ""'의 값을가집니다. 따라서 유효성 검사에 isEmpty()를 포함시켜야 함을 기억하십시오. – lxcky

+0

교수님 ... 고맙습니다. "가치있는 String 변수" "는 null로 인식되지만 JSP에서는 그렇지 않습니다. 정말 고맙습니다. – Hiroki

1
<input type="text" name="ID_A" value="" /> 

, 당신은 값으로 키와 ID_A"" (빈 문자열)을해야합니다. 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")))) { 
... 
}