JSF 1.2에서JSF 2.0으로의 이행
JSF 1.2로 되어 있는 큰 앱을 사용하고 있습니다.JSF 1.2는 6년 정도 되었습니다.JSF 2.0으로 업그레이드해야 합니다.얼마나 아플까요?커스텀 태그의 속성 등이 변경되어 있는 것을 알 수 있었습니다.
괴로움
JSF 1.2를 2.0으로 업그레이드하는 데 따른 어려움은 현재 사용 중인 뷰 기술과 사용하려는 뷰 기술에 따라 달라집니다.
- JSP 2.x에서 JSP 2.x로= 거의 노력하지 않습니다.
- Facellet 1.x에서 Facellet 2.0으로 = 약간의 노력.
- JSP 2.x에서 Facellets 2.0 = 많은 노력.커스텀 컴포넌트도 있는 경우는, 2배로 합니다.
기본 변경 사항
View 테크놀로지 스위치에 관계없이 적어도 다음 단계를 수행해야 합니다.
- JSF 1.2 JAR 에서 .2 를 합니다.
/WEB-INF/lib(일부러) - JSF 2.0 JAR에서 2.합니다.
/WEB-INF/lib(JSF 1.2가 서블릿 컨테이너에서 제공된 경우 서블릿 컨테이너 라이브러리보다 먼저 웹 앱 라이브러리를 로드하도록 클래스 로드 정책을 변경할 수 있습니다. 응용 프로그램 서버의 JSF2 클래스 로드 문제도 참조하십시오.) 선언을 합니다.
faces-config.xmlJSF 2.0을 사용합니다.<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">2.하고 있는 「JSF 2.2」를 .
http://xmlns.jcp.org에서 '네임스페이스 도메인'http://java.sun.com「XML」입니다.선언이 root 선언임을 확인합니다.
web.xml는 이미 Servlet 2.5 이상을 준수하고 있습니다.JSF 2.0은 2.4 이하에서는 동작하지 않습니다(해킹 가능하지만).<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="YourWebappID" version="2.5">3.0하고 있는 「: Servlet 3.0」을 .
http://xmlns.jcp.org에서 '네임스페이스 도메인'http://java.sun.com「XML」입니다.
JSP 2.x에서 JSP 2.x로
JSP 2.x 를 사용하고 있어 계속 사용하고 싶은 경우는, 그 외의 변경은 필요 없습니다.
단계적으로 업그레이드하다
서픽스를 url-pattern★★★★★★★★★★★★★★★★의 경우FacesServlet,맘에 들다*.jsf 하면,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.FacesServlet 를 will will will 、 will 、 will 、 will 、 will 。*.xhtml는, 해 주세요.*.jsp에서 JSP에서 할 수 .
프리픽스 「」를 하고 있는 는, 「 」를 합니다.url-pattern,맘에 들다/faces/*하고 싶은 을 JSP Facellet으로 해야 합니다.*.jsf또한 기존 JSP 페이지의 모든 링크도 포함할 수 있습니다.
이 제공되는 2. JSF 2.0으로 합니다.outcome.xhtml어쨌든. 그래서 만약 또는 그래서에 만약가고 싶다면 오거나 당신이 갔으면 좋겠다.*.jsp, 그러면 여전히 그viewid은 JSF 1.x방식으로 포함시켜야 한다.그래도 뷰ID에 JSF 1.x방식으로포함시켜야 합니다.
Facellet 1.x에서 Facellet 2.0으로
뷰 테크놀로지로 Facellets 1.x를 사용하고 있으며 JSF 2.0에서 제공하는 Facellets 2.0을 사용하려면 다음 단계를 추가로 수행해야 합니다.
- Facellet 1.xJAR 삭제에서 Facelets 1.xJAR을 제거한다.
/WEB-INF/lib.. - 제거 Facelets 1.x페이스렛 1.x삭제
FaceletViewHandler부터에서faces-config.xml.. - 주문 임의의 커스텀
FaceletViewHandler대신 구현을 확장하려면 업데이트해야 합니다. - 하지만 정리를 위해서, 어떤 Facelets 1.x 관련필수는 아니지만 정리를위해 관련된 모든 Facellet 1.x를 제거합니다를 제거할 필요 없어
<context-param>로부터의 값web.xmlFacelets 2.0의 Facellets 2.0에서는 디폴트로설정되어 있습니다 어떤 이미 기본.javax.faces.DEFAULT_SUFFIX의 가치가 있는 값으로*.xhtml.. 기존 Facellet taglib XML의 루트 선언을 Facellet 2.0을 준수하도록 업데이트합니다.
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd" version="2.0">참고:당신 JSF 2.2이나 새로운를 사용하는 경우는 주의:JSF 2.2이후를 사용하는 경우를 사용한다.
http://xmlns.jcp.org에서 '네임스페이스 도메인'http://java.sun.com「XML」입니다.
기본적으로는 그게 다예요.
JSP 2.x에서 페이스렛 2.0으로
뷰 테크놀로지로 JSP 2.x를 사용하고 있으며 Facellets 2.0으로 즉시 업그레이드하려면 사이트를 활성화하기 전에 많은 변경을 수행해야 합니다.기본적으로 뷰 테크놀로지를 바꾸는 것입니다.
마스터 페이지 변경
모든 마스터 페이지에서 다음 기본 JSP 템플릿을 변경해야 합니다.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html>
<f:view>
<html lang="en">
<head>
<title>JSP page</title>
</head>
<body>
<h:outputText value="JSF components here." />
</body>
</html>
</f:view>
..다음 기본 페이스렛 템플릿:
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>XHTML page</title>
</h:head>
<h:body>
<h:outputText value="JSF components here." />
</h:body>
</html>
2.하고 있는 「JSF 2.2」를 .http://xmlns.jcp.org에서 '네임스페이스 도메인'http://java.sun.comXHTML을 사용합니다.
페이지 변경 포함
기존 JSP 페이지가 적절하게 설계되어 있는 경우 스크립트렛 코드 행은 사용하지 않고<jsp:include>JSP에 의한 것입니다.하다
<jsp:include page="include.jsp" />
로.
<ui:include src="include.xhtml" />
기본 JSP에는 다음과 같은 페이지 템플릿이 포함됩니다.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<f:subview id="include">
<h:outputText value="JSF components here." />
</f:subview>
..다음 기본 페이스릿 포함 페이지 템플릿으로 변경해야 합니다.
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:outputText value="JSF components here." />
</ui:composition>
2.하고 있는 「JSF 2.2」를 .http://xmlns.jcp.org에서 '네임스페이스 도메인'http://java.sun.comXHTML을 사용합니다.
커스텀 컴포넌트 변경
이 Mojarra 이행가이드의 설명에 따라 JSP TLD 파일을 Facellet TLD 파일로 변경해야 합니다.
여파
할 수 .faces-config.xml새로운 JSF 2.0 주석 또는 CDI에 의해 결정됩니다.조금도<managed-bean>에 의해 주석이 붙을 수 있습니다.
@ManagedBean(name="managedBeanName")
@RequestScoped
public class SomeBean {}
옆에는 및 사용 가능한도 있습니다.를 생략하면name「」의 @ManagedBean클래스 네임
@ManagedBean
@RequestScoped
public class SomeBean {}
이 예에서는, 다음과 같이 됩니다.#{someBean}.
의 ★★★★<managed-property>에 주석을 달 수 있습니다.
@ManagedProperty("#{otherBean}")
private OtherBean otherBean;
의 ★★★★<validator>에 주석을 달 수 있습니다.
@FacesValidator("someValidator")
public class SomeValidator implements Validator {}
의 ★★★★<converter>를 사용하여 주석을 달 수 있다
@FacesConverter("someConverter")
public class SomeConverter implements Converter {}
의 ★★★★<renderer>를 사용하여 주석을 달 수 있다
@FacesRenderer(componentFamily="someComponentFamily", rendererType="someRendererType")
public class SomeRenderer extends Renderer {}
의 ★★★★<navigation-case>는, 을 XHTML 의 양쪽 모두로서 합니다.<from-outcome> ★★★★★★★★★★★★★★★★★」<to-view-id>이 작업은 암묵적으로 수행되므로 제거할 수 있습니다.이는 모든 결과 값을 대상 뷰의 파일 이름과 일치하도록 변경하여 점진적으로 수행할 수 있습니다.
동일한 으로 빈 를 유지하는 "/"로 수 .@ViewScoped이렇게 하면 최종 사용자가 같은 페이지를 다른 탭/창에서 열어도 Bean에는 영향을 주지 않습니다.
컴포넌트 라이브러리
이 답변에서는 PrimeFaces/RichFaces/IceFaces와 같은 서드파티 컴포넌트 라이브러리는 고려하지 않습니다.그것은 기본적으로 "의존"으로 요약되기 때문에 신뢰할 수 있는 답변을 쓰는 것은 불가능합니다.일반적으로 구성 요소 라이브러리를 지침에 따라 자체적으로 검증된 JSF 2.0 호환 버전으로 업그레이드하면 됩니다.가장 좋은 방법은 장치 테스트를 작성하여 업그레이드 전후에 실행하고 문제를 개별적으로 해결하는 것입니다.
다음은 특정 컴포넌트 라이브러리의 이행에 관한 몇 가지 유용한 링크입니다.
PrimeFaces 1.x 에는 PrimeFaces 1.x 로의 이행 가이드가 없습니다.PrimeFaces 1.x 에는 이미 Facellet 1.x 가 필요하기 때문에 PrimeFaces 1.x 에서 2.x 로의 이행 절차만 따르면 됩니다.그러나 PrimeFaces 1.x에서 3.x(또는 그 이후)로의 이행 가이드도 있습니다.이 가이드는 PrimeFaces 1.x에서 3.x(또는 그 이후)로의 이행에도 적용됩니다.Tomahawk도 이행 가이드가 없습니다.기본적으로 변경할 필요가 있는 것은 JAR뿐입니다.필요에 따라 모든 것을 삭제합니다.<t:saveState>bean 뷰의 스코프를 지정하여 요청의 스코프된 bean 참조를 지정합니다.
JSF 1.2와 함께 JSTL을 사용하는 사용자가 있는 경우 JSF2로 업그레이드할 때 네임스페이스를 다음과 같이 변경해야 합니다.
대상:
http://java.sun.com/jsp/jstl/core
JSF 2.0에는 많은 신기능과 컴포넌트가 포함되어 있어 이행이 번거롭지 않습니다.당신이 어려워하는 부분은 thrid party library를 사용하는 것입니다.애플리케이션이 리치페이스와 같은 라이브러리에 크게 의존하고 있는 경우는, 문제가 발생합니다.리치페이스 3의 모든 컴포넌트가 리치페이스4로 포팅되어 있는 것은 아닙니다.
또한 JSF 1.2 애플리케이션을 JSF 2.0으로 마이그레이션하는 데 도움이 될 수 있습니다.
또한 이 항목도 확인하십시오. JSF 2의 새로운 기능은 무엇입니까?
Web.xml
Add the jars
1. jsf-api-2.0.jar
2. jsf-impl.2.0.2.jar
순서 1: web.xml 변경
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
스텝 2: webmvc-config.xml
<!-- Handles requests mapped to the Spring Web Flow system -->
<bean id="flowController" class="org.springframework.webflow.mvc.servlet.FlowController">
<property name="flowExecutor" ref="flowExecutor" />
<property name="ajaxHandler">
<bean class="org.springframework.faces.webflow.JsfAjaxHandler" />
</property>
</bean>
스텝 3: facess-config.xml
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" version="2.0">
Apache Trinided를 사용하는 경우 JSF 2.0을 지원하려면 버전 2.0으로 업그레이드해야 합니다.해커의 발할라에 더 많은 정보가 있어요
언급URL : https://stackoverflow.com/questions/4441713/migrating-from-jsf-1-2-to-jsf-2-0
'source' 카테고리의 다른 글
| PHP 세션이 하위 도메인으로 전달되도록 허용 (0) | 2022.10.18 |
|---|---|
| PHP에서 루프를 종료할 수 있습니까? (0) | 2022.10.18 |
| MariaDB/MySQL에서 전체 텍스트 검색을 위해 문자열을 이스케이프하는 방법 (0) | 2022.10.18 |
| 함수 호출의 타임아웃 (0) | 2022.10.18 |
| 정수 배열을 올바르게 정렬하는 방법 (0) | 2022.10.18 |