2014-04-07 4 views
1

JSP 코드에서 Java 코드를 분리하려고하는데 약간 문제가 있습니다. 나는 사용자가 손님인지 여부를 알아 내려고하고 적절한 작업 EG 로그인 양식이나 사용자 이름을 인쇄하려고합니다.jstl 조건부 작동하지 않음

Heres는 내의 index.jsp 파일 :

<% if(view.guest) { %> 
<%= "Scriptlet: Login Form Here" %> 
<% } else { %> 
<%= "Scriptlet: User Name Here" %> 
<% } %> 

<br/><br/> 

<c:choose> 
<c:when test="${view.guest eq true}"> 
JSTL Tag: Login Form Here 
</c:when> 
<c:otherwise> 
JSTL Tag: User Name Here 
</c:otherwise> 
</c:choose> 

이 다음과 같은 출력을 생성합니다

스크립틀릿 : 로그인 폼

JSTL 태그 : 사용자 이름

당신이 볼 수 있듯이 Scriptlet은 예상되는 결과를 생성하지만 JSTL 태그는 반대 결과를 생성합니다. 실제로 JSTL의 조건을 false (디버깅 목적으로)로 바꾸면 "JSTL 태그 : 사용자 이름"과 같은 결과가 생성됩니다.

Btw view.guest는 객체보기의 공개 부울 변수입니다.

답변

0

JSP EL은 지역 변수에 액세스하지 않습니다. 그것은 페이지, 요청, 세션 또는 응용 프로그램 범위의 속성에 액세스합니다. 또한 공용 필드 (결코 사용해서는 안 됨)를 사용하지 않고 Java Bean 규칙을 존중한다고 가정합니다.

Java에서와 마찬가지로 부울을 참과 비교하는 것은 필요하지 않습니다. 당신은

<c:when test="${view.guest}"> 

이 필요하고 "보기"라는 이름의 페이지 요청, 세션 또는 응용 프로그램 속성이있을 경우 조건은 공개 getGuest() 또는 isGuest() 메소드가 true를 반환 가진 true로 평가합니다.

스크립틀릿을 전혀 사용하지 않은 경우 페이지에 로컬 변수가 없으므로이 문제가 발생하지 않습니다.

+0

를 사용했는데 작동하지 않았습니다. 개체의 변수에 대해 테스트 할 수있는 방법이 있습니까? – user3473776

+0

내 대답에 실수를 수정했습니다. 다시 읽으십시오. 그러나 공공 분야와 스크립틀릿에 대해서는 분명히 잊어 버리십시오. 하고 여전히 같은 결과 –

+0

는 나의 CodeProjects.java 파일이 추가 ", 페이지, 요청, 세션 또는 응용 프로그램 범위에서? – user3473776