2012-09-19 14 views
0

I (<퍼센트 %> 내부) 내 JSP 스크립틀릿에 다음 코드를 가지고이상한 행동

:

boolean blockScreen = false; 
    if(title.equalsIgnoreCase(labelA) || title.equalsIgnoreCase(labelB)) 
    { 
    blockScreen = true; 
    } 

상기 JSP에 대응하는 생성 된 자바 파일 코드 (동일한) 다음 포함

boolean blockScreen = false; 
     if(title.equalsIgnoreCase(labelA) || title.equalsIgnoreCase(labelB)) 
     { 
     blockScreen = true; 
     } 

하지만 디버깅 할 때 blockScreen 변수를 볼 수 없습니다. 나는 클래스 파일을 디 컴파일, 다음과 같은 코드를 볼 수 있습니다

if(!title.equalsIgnoreCase(labelA)) 
      if(!title.equalsIgnoreCase(labelB)); 

blockScreen 변수가 클래스 파일에서 청소 점점 왜 확실하지. 동일한 변수가 c : choose 태그에서 더 아래로 사용됩니다.

<c:choose> 
<c:when test="${blockScreen==true}"> 
<!--do something -->  
</c:when> 
<c:otherwise> 
<!--do something else --> 
</c:otherwise> 
</c:choose> 

저는 JBoss EAP 6 서버를 사용하고 있습니다.

감사합니다.

+0

''태그의 변수는 어떻게 사용합니까? – axtavt

+0

죄송합니다. c : choose 태그에 변수가 사용되었습니다. 나는 c : choose 코드로 질문을 업데이트했다. – Manish

+0

javap 도구를 사용하여 클래스 파일을 실행하고 변수가 아직 있는지 확인하십시오. – Shailendra

답변

1

EL 표현 ${blockScreen==true}은 사용이 아닌 스크립틀릿 변수 blockScreen라는 요청 속성 따라서 컴파일러는 사용 된 변수를 자유롭게 최적화 할 수 있습니다.

대신 스크립틀릿 변수를 사용하려면 <c:when test="<%= blockScreen %>">을 시도하십시오.

+0

바로 돈! 감사! – Manish

0

AFAIR 변수 범위가 scriplet (및 생성 된 서블릿)에 국한되므로 NOT 페이지의 나머지 부분에서 가시적으로 볼 수 있습니다. 이런 이유로 컴파일러는 그것을 완전히 제거 할 것입니다.
경우 사용 동일 ... 그것은 다른 곳에서 페이지 전체 변수를 선언하는 것을 의미 페이지에서 다른 변수 곳이라는

+0

하지만 c : choose 태그에서 동일한 변수를 사용할 때 컴파일 오류가 발생하지 않아야합니까? – Manish

+0

더 제한적으로 범위가 지정된 로컬 변수를 선언하므로 컴파일 오류가 발생하지 않습니다. –