동일한 문자열에 대한 JSTL if 태그


91

내 JSP 페이지의 개체에서 변수가 있습니다.

<%= ansokanInfo.getPSystem() %>

변수의 값은 올바른 NAT이며이 값에 특정 페이지 요소를 적용하고 싶습니다. 사례를 알기 위해 태그를 어떻게 사용합니까? 나는 같은 것을 시도했다

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">      
   process  
</c:if> 

그러나 위는 아무것도 표시하지 않습니다. 어떻게해야합니까? 또는 스크립틀릿을 사용할 수 있습니까?

<% if (ansokanInfo.getPSystem().equals("NAT"){ %>
process
<% } %>

답변이나 의견을 보내 주셔서 감사합니다.


1
당신은 정교한시겠습니까 getPSystem()ansokanInfo? 요청에서 설정하거나을 통해 액세스 import합니까?
Santhosh

1
IIRC는 요청에서 설정하고 있었고 해결책 (해결 방법)은 BalusC에서 말한대로 웹 스피어를 업그레이드하는 것이었고 새 버전은 태그로 빈 메서드를 호출 할 수 있습니다. 질문에서 표준 웹 스피어를 사용하고 있었고 jsp 및 jstl이 메소드를 실행할 수 있기 전에 일부 버전을 사용했습니다. BalusC가 메서드를 호출 할 수있는 새 버전이 필요한 웹 스피어 버전을 사용하고 있다고 알려주는 다른 질문을 찾으십시오 .
Niklas R.

1
이제 앱 서버를 8로 업그레이드 했습니까? 그 솔루션이 실패합니까?
Santhosh 2014 년

@SanKrish 지금은 JSP를 사용하지 않습니다. 나는 그것이 당신을 위해 작동하고 새로운 버전의 앱 서버에 맞게 업데이트되기를 바랍니다.
Niklas R.

답변:


147

시험:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

JSP / Servlet 2.4 (버전 번호라고 생각합니다)는 EL에서 메서드 호출을 지원하지 않고 속성 만 지원합니다. 최신 서블릿 컨테이너는 메서드 호출을 지원합니다 (예 : Tomcat 7).


1
Jorn의 답변을 기반으로 답변을 업데이트했습니다. 그에게 모자의 끝.
Adam Gent 2011

3
JSP (X)를 포기했습니다. Mustache ( github.com/samskivert/jmustache ) 또는 자체 템플릿 언어 JATL ( code.google.com/p/jatl )을 사용합니다.
Adam Gent 2012

1
여러 문자열을 어떻게할까요? 더 나은 방법이 있습니다<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon


16

다른 답변은 EL 표현식에서 사용할 속성 이름에 대한 중요한 세부 정보가 누락되었다고 생각합니다. 메소드 이름에서 속성 이름으로 변환하는 규칙 은 Java Bean 표준의 일부인 'Introspector.decpitalize'에 지정되어 있습니다.

이것은 일반적으로 첫 번째 문자를 대문자에서 소문자로 변환하는 것을 의미하지만, 두 개 이상의 문자가 있고 첫 번째와 두 번째 문자가 모두 대문자 인 (비정상적인) 특수한 경우에는 그대로 둡니다.

따라서 "FooBah"는 "fooBah"가되고 "X"는 "x"가되지만 "URL"은 "URL"로 유지됩니다.

따라서 귀하의 경우 JSTL 코드는 다음과 같아야하며 대문자 'P'에 유의하십시오.

<c:if test = "${ansokanInfo.PSystem == 'NAT'}">

2
명명 규칙을 사용하는 게터 및 세터는 거의 Java Bean의 정의입니다. 변수가 jsp로 전달되는 위치에 대한 추가 정보가 필요하다고 생각합니다. EL에서 사용할 수 있으려면 요청 또는 pageContext 속성과 같은 특정 범위에 있어야합니다. 스크립트 블록에 의해 생성 된 지역 변수는 EL에서 사용할 수 없습니다.
Jörn Horstmann

5

스크립틀릿을 사용할 수 있지만이 방법은 아닙니다. 요즘에는 JSP 파일의 인라인 스크립 릿 또는 JAVA 코드가 나쁜 습관으로 간주됩니다.

JSTL에 대해 좀 더 읽어야합니다. ansokanInfo 개체가 요청 또는 세션 범위에있는 경우 개체 (toString () 메서드)를 다음과 같이 인쇄하면 $ {ansokanInfo}가 몇 가지 기본 정보를 제공 할 수 있습니다. $ {ansokanInfo.pSystem}은 개체 getter 메서드를 호출해야합니다. 이 모든 것이 작동하면 다음을 사용할 수 있습니다.

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.