2013-03-29 2 views
0

이 유효성 검사 기능이 있습니다. 데이터베이스에 대한 로그인 양식의 유효성을 확인합니다. 자바가 username.isEmpty()password.isEmpty()이라는 표현을 두 번 테스트합니까? if ((!username.isEmpty()) && (!password.isEmpty()))의 전,jsp mvc 로그인 및 등록 양식을 관리

if(username.isEmpty()) 
    error.addError("username", "Username is mandatory."); 
if(password.isEmpty()) 
    error.addError("password", "Password is mandatory."); 

후자?

동일한 테스트를 다시하지 않아도 첫 번째 테스트의 결과를 "저장"하는 내부 메커니즘이 있습니까? 공연을 계속하고 싶습니다. 동시에 오류 빈을 채워야합니다. 더 많은 수표와 함께 정규 표현식 (예 : 등록 양식)이 복잡한 필드를 추가하고 싶습니다. 그 기능이 여전히 좋을까요? 내가 따라야 할 기본 원칙은 : 모든 테스트에 합격 한 경우에만 플래그를 true로 지정하거나 코드 조각에 입력하십시오. 그렇지 않으면 기본적으로 false가됩니다. 반대의 경우도 마찬가지입니다 (기본적으로 플래그가 true로 설정되면 false가 될 수 있습니다).

나쁘다면 제 영어를 바로 수정하십시오. 감사.

public boolean validate(FormBean bean, FormErrorBean error) 
    { 
     // the validation flag 
     boolean valid = false; 

     if (bean instanceof LoginFormBean) 
     { 
      // check not null 
      if (!bean.isEmpty()) 
      { 
       String username = ((LoginFormBean) bean).getUsername(); 
       String password = ((LoginFormBean) bean).getPassword(); 

       if ((!username.isEmpty()) && (!password.isEmpty())) 
       { 
        // create the DAO 
        UserDao uDao = new UserDao(); 

        // check the user 
        valid = uDao.checkUser((LoginFormBean) bean); 

        // set the validation status of the bean 
        ((LoginFormBean) bean).setValid(valid); 

        // add the error, if any 
        if (!valid) 
         error.addError("Either the username is not valid or the password is wrong."); 
       } 
       else 
       { 
        if(username.isEmpty()) 
         error.addError("username", "Username is mandatory."); 
        if(password.isEmpty()) 
         error.addError("password", "Password is mandatory."); 
       } 
      } 
      else 
      { 
       // add the empty error... 
       error.addError("Both the username and password are missing."); 
      } 
     } 
     return valid; 
    } 

답변

1

내가 알고있는 한, 테스트 표현식은 두 번 실행됩니다.

username.isEmpty() 및 password.isEmpty()를 여러 번 실행하려는 경우 먼저 boolean으로 저장할 수 있습니다. 이것은 이론상으로 약간의 오버 헤드를 줄일 수 있습니다. 그러나, 결과가 인 경우 번을 여러 번 필요로하지 않으므로 성능 향상은 무시할 수 있습니다.

regex를 사용하여 더 많은 고유 검사를 추가하는 경우, 결과를 다시 사용해야하는 이미지를 만들 수 없습니다. 난 당신의 코드가 잘 구성되어 있다고 생각합니다.

1

java는 username.isEmpty() 및 password.isEmpty()라는 식을 두 번 테스트합니까?

예, 동일한 방법을 2 번 호출하면 가능합니다.

동일한 테스트를 다시하지 않아도 첫 번째 테스트의 결과를 "저장"하는 내부 메커니즘이 있습니까?

당신은 두 개의 서로 다른 논리 값 (그들 각각에 대해 1 비트)로 결과를 저장하기 위해 시도 할 수

:

boolean isPasswordEmpty = password.isEmpty(); 
boolean isUsernameEmpty = username.isEmpty(); 

그리고 당신의 테스트로 사용합니다.

더 많은 수표를 사용하여 더 많은 입력란을 만들려면 정규식 (예 : 등록 양식)이 복잡합니까? 그 함수가 여전히 좋을까요?

앞으로 양식을 검증하고 인증 방법론을 위해 Spring Web 또는 Apache Struts를 사용해보십시오.

내가 따라야 할 기본 원칙은 다음과 같습니다 할당 플래그에 충실 (또는 코드의 조각에 입력) 나는 모든 테스트를 통과 할 경우에만. 그렇지 않으면 기본적으로 false가됩니다. 악귀가 아닙니다. 그 반대의 경우 (기본적으로 true로 설정된 플래그는 허위가 될 수 있습니다).

나는 다음 단계가 될 것이라고 생각합니다. "나는 깃발 이상이 필요합니다. 사용자 ID, 이름 및 성이 필요합니다.". 따라서 DTO와 같이 필요한 패턴을 저장하고 응용 프로그램 수준에서 데이터를 전송하는 것과 같은 몇 가지 패턴을 사용해보십시오.

당신은 당신의 코드에 관심을 지불 할에 내가 제안하고 싶습니다

: (! bean.isEmpty())

경우, username.isEmpty() 등

때문에

에 NullPointerException이 가능합니다. Object에 액세스하기 전에 Object가 null이 아닌지 확인해야합니다. 도움이

희망,

안녕

관련 문제