728x90
반응형
JSF의 EL(Expression Language) 표현식에서 AND 조건 사용 시의 주의할 점에 대해 알아본다.
1. 에러원인
2. 해결방안
3. JSF EL과 JSP EL의 차이점

 

아래와 같은 JSF의 EL표현식을 이용하여 개발을 하다가 다음과 같은 조건을 지정할 때 에러( The entity name must immediately follow the '&' in the entity reference. )가 발생을 하였다.

 

#{(NewState() && AA.size() == 0) ? false : true}

 

지금이야 이유를 알기에 금방 수정하면 되지만, 처음 에러가 발생했을 때는 원인을 찾는데 상당한 시간이 소요됐던 걸로 기억한다.

 

 


JSF (Java Server Faces)는 포괄적인 애플리케이션 개발 프레임워크이고 많은 것들을 포함하고 있다.

그중 뷰들과 컴포넌트 트리들을 구축하는 데 사용되는 JSF용 뷰 핸들러인 Facelets도 포함되는데,  Facelets는 XML을 기반으로 하는 뷰 기술이다.

문제는 Facelets란 애가 EL 표현식을 사용할 수 있도록 지원해주는 역할도 하는데,  XML 기반의 기술이다 보니 XML문법의 영향을 받는다는 것이다.

나는 JSP의 EL 표현식을 생각해 무심코 「&&를 AND 조건으로 사용했지만, 「&기호는 XML문법에서 엔티 지정자로 사용하는 예약 문자였기 때문에 사용했을 때 에러가 났던 것이다.

 

※참고로 JSP를 기본 뷰 선언 언어로 사용하는 JSF 1.1 및 JSF 1.2에선  Facelets가 별도의 뷰 선언 언어로 사용되었지만, JSF 2.0부턴 Facelets가 기본 뷰 선언 언어로 승격되고 JSP는 더 이상 사용되지 않는다.

 

 

 


&기호를 의미하는 HTML의 특수 코드인 「&」를 사용하던지, 다른 EL표현식인「and」문자를 사용한다.

 

#{(NewState() && AA.size() == 0) ? false : true}
#{(NewState() and AA.size() == 0) ? false : true}

 

OR조건을 사용하는 경우는 기존 JSP EL표현식처럼  「||」기호과「or」문자 둘 다 사용이 가능하다.

 

 

 


JSF EL은 JSP 2.0에 포함되어 있는 EL을 근간으로 하지만 아래와 같은 차이점이 있다.

  • JSF EL 표현식은 시작할 때「$가 아닌 「#으로 시작한다.
  • JSF EL 표현식은 양방향으로 사용할 수 있다. 즉 특정값을 얻을 수도 있지만, 갱신할 수도 있다.
  • JSF EL 표현식은 메서드를 참조하는 데도 사용할 수 있다.
  • JSF EL 표현식은 일반적인 자바 코드를 평가하는 데 사용할 수 있다.
  • JSF EL 표현식에서 JSP EL의 함수는 공식적으로 지원하지 않는다.

 

참조
How to use && in EL boolean expressions in Facelets?
https://stackoverflow.com/questions/8552901/how-to-use-in-el-boolean-expressions-in-facelets
Facelets

https://en.wikipedia.org/wiki/Facelets

글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
728x90
반응형

'JSF (Java Server Faces)' 카테고리의 다른 글

JSF web.xml 서블릿, 필터 맵핑  (0) 2024.02.17