[jsf-2] $ {}와 # {}의 차이점은 무엇입니까?

JSF2에서 프로그래밍 중이며 NetBeans #{}는 표현식을 포함하는 많은 페이지를 만듭니다 . 그러나 때로는 웹 ${}에서 같은 것을 찾았 습니다!

차이점이 있습니까? 그들은 무엇인가?



답변

  • #{}위한 연기 표현 (가 페이지의 라이프 사이클에 따라 해결) 읽거나에서 나에의 기입 해에 사용하는 이나 할 메서드 호출을 .
  • ${}즉각적인 해결을 위한 표현이며 , 발견되는 즉시 해결됩니다. 읽기 전용입니다.

자세한 내용은 http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html에서 읽을 수 있습니다.


답변

“Java Server Faces dollar pound”에 대한 Google 검색은 JBoss Expression Language FAQ 에서 다음과 같은 결과를 얻었습니다 .

일부 표현식은 파운드로 시작하고 다른 표현식은 달러 기호로 시작하는 이유는 무엇입니까?

EL 사양 자체의 경우 차이가 없습니다. 의미를 결정하는 것은 EL을 사용하는 기술에 달려 있습니다. JSP와 JSF 모두에서 파운드 기호로 시작하는 표현식은 지연된 평가를 의미 하고 달러 기호는 즉각적인 평가를 의미 합니다 . 이 모든 것은 요청 처리 중에 표현식이 실제로 평가 되는시기와 관련 이 있습니다 . 파운드 기호는 JSP 또는 Facelets 엔진이 아닌 JSF 라이프 사이클에 의해 표현식이 평가되기를 원하기 때문에 JSF 컴포넌트에서 사용됩니다.


답변

그건 좋은 질문이야! 나는 한 번 직면했고 당신처럼 답을 찾는 데 많은 어려움을 겪었습니다 …이 문서를 우연히 발견 할 때까지 :

통합 EL의 주요 기능 중 하나는 식의 즉각적인 평가와 지연된 평가를 모두 지원한다는 것입니다. 즉시 평가는 JSP 엔진이 표현식을 평가하고 페이지가 처음 렌더링 될 때 즉시 결과를 반환 함을 의미합니다. 지연된 평가는 표현 언어를 사용하는 기술이 적절할 때마다 페이지 수명주기 중 언젠가 표현을 평가하기 위해 자체 기계를 사용할 수 있음을 의미합니다. 즉시 평가되는 표현식은 JSP 2.0 표현식 언어에 도입 된 $ {} 구문을 사용합니다. 평가가 지연되는 표현식은 JavaServer Faces 기술에 의해 도입 된 # {} 구문을 사용합니다.


답변

JSF EL은 JSP EL이 jsf1.2에서 달러 기호 ($)를 사용하는 해시 (#)를 사용합니다. 두 구문이 모두 통합되었습니다.


답변

Java 문서는 다음 설명을 제공합니다.

$ {customer.name}
# {customer.name}

전자는 즉시 평가 구문을 사용하는 반면 후자는 지연된 평가 구문을 사용합니다. 첫 번째 표현식은 name 속성에 액세스하고 해당 값을 가져와 응답에 값을 추가 한 다음 페이지에서 렌더링됩니다. 두 번째 표현식도 마찬가지입니다. 그러나 태그 핸들러는이 태그를 사용하는 기술이 허용하는 경우 페이지 라이프 사이클의 나중 시간으로이 표현식의 평가를 연기 할 수 있습니다.

JavaServer Faces 기술의 경우 후자의 태그 표현식은 페이지에 대한 초기 요청 중에 즉시 평가됩니다. 이 경우이 식은 rvalue 식으로 작동합니다. 포스트 백 요청 중에이 표현식을 사용하여 사용자 입력으로 name 속성 값을 설정할 수 있습니다. 이 경우 식은 lvalue 식으로 작동합니다.

여기에서 더 읽기 : 값 표현


답변