[jsf] Facelets의 EL 부울 표현식에서 &&를 사용하는 방법은 무엇입니까?

Facelets에서 EL 표현식을 수행하는 방법을 파악하는 데 약간의 문제가 있습니다. 그래서 기본적으로 다음과 같습니다.

<h:outputText id="Prompt"
    value="Fobar"
    rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />

그러나 나는 계속 얻는다 :

오류 추적 [line : 69] 엔티티 이름은 엔티티 참조에서 ‘&’바로 뒤에 와야합니다.



답변

Facelets는 XML 기반보기 기술입니다. 는 &A는 특수 문자 와 같은 엔티티의 시작을 나타내는 XML에 &amp;로 끝나는 ;문자를. 당신은 그것을 탈출해야 할 것입니다.

rendered="#{beanA.prompt == true &amp;&amp; beanB.currentBase != null}"

또는 and가독성과 유지 관리 측면에서 선호되는 키워드를 대신 사용하십시오 .

rendered="#{beanA.prompt == true and beanB.currentBase != null}"

또한보십시오:


구체적인 문제와는 무관 하게, 표현식이 이미 부울 결과를 예상 할 때 부울과 부울을 비교하는 것은 의미가 없습니다. 나는 제거 할 것이다 == true:

rendered="#{beanA.prompt and beanB.currentBase != null}"


답변

BalusC의 대답 또한, 교체하려면 다음과 같이 자바 정규식을 사용 &&하여 and:

Search:  (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3

EL 표현식에서> 2 리터럴을 사용하는 경우 모든 발생을 찾기 위해이 정규 표현식 대체를 여러 번 실행했습니다. EL 표현식 구문이 다른 경우 선행 #을 $로 바꾸십시오.


답변