JSF 2.0의 단점? 솔직히 기본 웹 개발 (HTML / CSS / JS, 서버 측 대 클라이언트 측 등)과 기본 Java 서블릿 API (요청 / 응답 / 세션 ) 에 대한 배경 지식이없는 경우 상대적으로 가파른 학습 곡선을 제외하고 , 전달 / 리디렉션 등)에는 심각한 단점이 없습니다. 현재 릴리스의 JSF는 여전히 초기에 얻은 부정적인 이미지를 제거해야하며 몇 가지 심각한 단점이 있습니다.
JSF 1.0 (2004 년 3 월)
이것은 초기 릴리스였습니다. 그것은 당신이 알고 싶지 않은 핵심 영역과 성능 영역 모두에서 버그로 어수선했습니다. 웹 응용 프로그램이 직관적으로 예상대로 작동하지는 않았습니다. 개발자는 울부 짖을 것입니다.
JSF 1.1 (2004 년 5 월)
이것은 버그 픽스 릴리스입니다. 성능은 여전히 크게 향상되지 않았습니다. JSF 페이지에서 HTML을 완벽하게 인라인 할 수 없습니다. 모든 일반 바닐라 HTML 은 JSF 컴포넌트 트리 보다 먼저 렌더링됩니다 . <f:verbatim>
JSF 컴포넌트 트리에 포함되도록 모든 일반 바닐라를 태그로 묶어야합니다. 이것은 사양에 따른 것이지만 많은 비판을 받았습니다. ao JSF / Facelets : JSF / Facelet을 HTML 태그와 혼합하는 것은 왜 좋지 않은가?
JSF 1.2 (2006 년 5 월)
Ryan Lubke가 이끄는 새로운 JSF 개발 팀의 첫 번째 릴리스입니다. 새로운 팀은 많은 훌륭한 일을했습니다. 사양도 변경되었습니다. 주요 변경 사항은 뷰 처리의 개선이었습니다. 이는 JSF를 JSP에서 완전히 분리했을뿐만 아니라 JSP와는 다른보기 기술을 사용할 수있을뿐만 아니라 개발자가 <f:verbatim>
태그를 사용 하지 않고도 JSF 페이지에서 일반 바닐라 HTML을 인라인 할 수있게 해줍니다. 새로운 팀의 또 다른 주요 초점은 성능 향상이었습니다. Sun JSF Reference Implementation 1.2 ( 2008 년경 빌드 1.2_08 이후 코드 명 Mojarra) 의 수명 동안 , 실질적으로 모든 빌드는 일반적인 (부수) 버그 수정 옆에 (주요) 성능 향상이 제공되었습니다.
JSF 1.x (1.2 포함)의 유일한 단점은 요청 과 세션 범위 (소위 대화 범위) 사이에 범위가 없다는 것입니다 . 이를 통해 개발자는 유효성 검사, 변환, 모델 변경 및 작업 호출을 성공적으로 처리하기 위해 후속 요청에서 초기 모델 데이터를 유지하려고 할 때마다 숨겨진 입력 요소, 불필요한 DB 쿼리 및 / 또는 세션 범위를 남용해야했습니다. 복잡한 웹 애플리케이션. MyFaces Tomahawk <t:saveState>
구성 요소, JBoss Seam 대화 범위 및 MyFaces 오케스트라 와 같은 후속 요청에서 필요한 데이터를 보유하는 써드 파티 라이브러리를 채택하여 고통을 완화 할 수 있습니다. 대화 프레임 워크.
HTML / CSS 순수 주의자의 또 다른 단점은 JSF가 콜론 :
을 ID 구분 문자로 사용 id
하여 생성 된 HTML 출력에서 HTML 요소의 고유성을 보장한다는 것입니다. . 이 CSS 식별자에 잘못된 문자이기 때문에, 당신은을 사용해야합니다 \
같은 추한 및 홀수 찾고 선택기의 결과로, CSS 선택기에서 콜론을 탈출 #formId\:fieldId {}
하거나 #formId\3A fieldId {}
. CSS 선택기에서 콜론 ":"과 함께 JSF 생성 HTML 요소 ID를 사용하는 방법 도 참조하십시오 . 그러나 순수하지 않은 경우 기본적으로 JSF는 사용할 수없는 ID를 생성하며 이는 웹 표준의 css 부분과 호환되지 않습니다 .
또한 JSF 1.x는 기본적으로 Ajax 기능과 함께 제공되지 않았습니다. 실제로 기술적 인 단점은 아니지만 그 기간 동안 Web 2.0 과대 광고로 인해 기능상의 단점이되었습니다. Exadel 은 초기에 Ajax4jsf를 도입하기 시작했으며 수년간 철저히 개발되어 JBoss RichFaces 구성 요소 라이브러리 의 핵심 부분이되었습니다 . 또 다른 구성 요소 라이브러리에는 내장 된 Ajax 기능도 함께 제공되며 잘 알려진 것은 ICEfaces 입니다.
JSF 1.2 수명의 절반 쯤에 새로운 XML 기반 뷰 기술인 Facelets 가 도입되었습니다 . 이는 특히 템플릿 영역에서 JSP보다 큰 이점을 제공했습니다.
JSF 2.0 (2009 년 6 월)
이것은 Ajax를 유행어로 사용하는 두 번째 주요 릴리스입니다. 기술 및 기능이 많이 변경되었습니다. JSP는 기본보기 기술로서 Facelets로 대체되었으며 Facelets는 순수 XML (소위 복합 컴포넌트 )을 사용하여 사용자 정의 컴포넌트를 작성하는 기능으로 확장되었습니다 . JSF2.0 이후의 뷰 정의 언어로 Facelets가 JSP보다 선호되는 이유 는 무엇입니까?
Ajax 기능은 <f:ajax>
Ajax4jsf와 많은 유사성을 가진 구성 요소의 풍미에 도입되었습니다 . 자세한 정보 파일을 최대한 많이 종료 하기 위해 주석 및 구성에 대한 컨벤션 향상 기능이 도입되었습니다 faces-config.xml
. 또한 기본 이름 지정 컨테이너 ID 구분 기호 문자를 :
구성 할 수있게되어 HTML / CSS 순수 주의자가 안심할 수 있습니다. 당신이 할 필요가로 정의하는 것입니다 init-param
의 web.xml
이름으로 javax.faces.SEPARATOR_CHAR
당신과 같은 클라이언트 ID 년대에 아무 곳이나 문자를 직접 사용하고 있지 않은지 및 보장 -
.
마지막으로 새로운 범위 인 뷰 범위 가 도입되었습니다 . 앞에서 설명한 것처럼 또 다른 주요 JSF 1.x 단점을 제거했습니다. @ViewScoped
후속 (대화식) 요청에서 데이터를 유지하는 모든 방법을 번거롭게하지 않고 대화 범위를 사용 하도록 Bean 을 선언하기 만하면 됩니다. @ViewScoped
이후에 제출하고 동일한보기로 이동하고 같은 콩은 오래 살 것이다 (독립적으로 열린 브라우저 탭 / 창!), 동 기적 또는 비동기 (아약스). 참고 관리 콩보기 및 요청 범위의 차이 와 어떻게 바로 콩 범위를 선택하는 방법을?
JSF 1.x의 실질적인 모든 단점이 제거되었지만, JSF 2.0 특정 버그가 있습니다. 는 @ViewScoped
태그 핸들러에서 실패 로 인해 부분적인 상태 절약에 닭이 먼저 냐 달걀이 먼저 냐의 문제에. 이것은 JSF 2.2에서 수정되었으며 Mojarra 2.1.18에서 백 포트되었습니다. 또한 HTML5와 같은 사용자 정의 속성 전달data-xxx
은 지원되지 않습니다. 이것은 새로운 통과 요소 / 속성 기능에 의해 JSF 2.2에서 수정되었습니다. 또한 JSF 구현 Mojarra는 고유 한 문제를 가지고 있습니다 . 상대적으로 많은 부분이 때때로 직관적이지 않은 동작<ui:repeat>
, 새로운 부분 상태 저장 구현 및 잘못 구현 된 플래시 범위와 관련이 있습니다. 대부분은 Mojarra 2.2.x 버전으로 수정되었습니다.
JSF 2.0 시간 경 에 jQuery 및 jQuery UI를 기반으로 PrimeFaces 가 도입되었습니다. 가장 인기있는 JSF 컴포넌트 라이브러리가되었습니다.
JSF 2.2 (2013 년 5 월)
JSF 2.2가 도입되면서 HTML5는 모든 이전 JSF 버전에서 기술적으로 만 지원되었지만 유행어로 사용되었습니다. JavaServer Faces 2.2 및 HTML5 지원을 참조하십시오 . 왜 XHTML이 여전히 사용되고 있습니까 ? 가장 중요한 새로운 JSF 2.2 기능은 커스텀 테이블리스 라디오 버튼 그룹 과 같은 가능성을 열어주는 커스텀 컴포넌트 속성에 대한 지원입니다 .
구현 특정 버그와 유효성 검사기 / 변환기에 EJB를 주입 할 수없는 것과 같은 일부 "성가신 작은 것"(이미 JSF 2.3에서 수정 됨) 외에도 JSF 2.2 사양에는 큰 단점이 없습니다.
컴포넌트 기반 MVC 및 요청 기반 MVC
JSF의 주요 단점은 생성 된 HTML / CSS / JS에 대한 세밀한 제어가 거의 불가능하다는 것입니다. 이는 JSF 자체가 아니며 요청 기반 (액션) 기반 MVC 프레임 워크가 아니라 컴포넌트 기반 MVC 프레임 워크 이기 때문 입니다. MVC 프레임 워크를 고려할 때 높은 수준의 HTML / CSS / JS를 제어하는 것이 주요 요구 사항이라면 이미 컴포넌트 기반 MVC 프레임 워크를 보지 말고 Spring MVC 와 같은 요청 기반 MVC 프레임 워크를 살펴보아야합니다 . HTML / CSS / JS 상용구를 직접 작성해야한다는 점만 고려하면됩니다. 요청 MVC와 컴포넌트 MVC의 차이점 도 참조하십시오 .
또한보십시오: