답변:
JSF 1.2를 2.0으로 업그레이드하는 데 따르는 고통은 현재 사용중인 뷰 기술에 따라 다릅니다.
뷰 기술 스위치에 관계없이 최소한 다음 단계를 수행해야합니다.
/WEB-INF/lib
(있는 경우) 제거하십시오 ./WEB-INF/lib
(JSF 1.2가 서블릿 컨테이너 제공 인 경우, 서블릿 컨테이너 라이브러리보다 먼저 웹 애플리케이션 라이브러리를로드하도록 클래스로드 정책을 변경하고자 할 수도 있습니다 ( 애플리케이션 서버의 JSF2 클래스로드 문제 참조 ).faces-config.xml
JSF 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">
참고 : JSF 2.2 이상을 사용하는 경우 위의 XML 스 니펫 http://xmlns.jcp.org
대신 네임 스페이스 도메인을 사용하십시오 http://java.sun.com
.
루트 선언이 web.xml
이미 서블릿 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">
참고 : Servlet 3.0 이상을 사용하는 경우 위의 XML 스 니펫 http://xmlns.jcp.org
대신 네임 스페이스 도메인을 사용하십시오 http://java.sun.com
.
당신이 사용하는 경우 JSP 2.x를을 하고 싶어 유지 를 사용하여, 당신은 기본적으로 다른 변경 아무것도 필요하지 않습니다.
와 같은 접미사 url-pattern
를 이미 사용 하고 있다면 먼저 파일을 스캔하고 파일이 없으면 파일을 스캔 한다는 것을 아는 것이 좋습니다 . 이를 통해 URL을 변경하지 않고 JSP에서이면 뒤에서 Facelets로 점차 변환 할 수있는 공간을 제공합니다.FacesServlet
*.jsf
FacesServlet
*.xhtml
*.jsp
당신이 접두사를 사용하는 경우 그러나 url-pattern
처럼, /faces/*
당신은 점차적으로 JSP에서 Facelets의로 업그레이드하려면, 당신은 정말 그것을 변경해야 할 *.jsf
도 가능 기존의 JSP 페이지에있는 모든 링크를합니다.
새로운 JSF 2.0 제공 암시 적 탐색은 파일의 존재를 스캔하지 않으므로 outcome.xhtml
어쨌든 진행된다는 것을 명심해야 합니다. 따라서에서 오거나 나가려면 *.jsp
JSF 1.x 방식으로 viewid에 포함시켜야합니다.
당신이 사용하는 경우 Facelets의 1.x에서 보기 기술 등을하고 JSF 2.0 공급 사용할 Facelets의 2.0 , 당신은 다음과 같은 추가 단계를 수행해야합니다
/WEB-INF/lib
.FaceletViewHandler
에서 Facelets 1.x 를 제거하십시오 faces-config.xml
.FaceletViewHandler
확장하려면 모든 사용자 지정 구현을 업데이트해야 ViewHandlerWrapper
합니다.<context-param>
값을 제거하십시오 .web.xml
javax.faces.DEFAULT_SUFFIX
*.xhtml
Facelets 2.0을 준수하도록 기존 Facelet taglib XML의 루트 선언을 업데이트하십시오.
<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 이상을 사용하는 경우 위의 XML 스 니펫 http://xmlns.jcp.org
대신 네임 스페이스 도메인을 사용하십시오 http://java.sun.com
.
기본적으로 그렇습니다.
JSP 2.x 를 뷰 기술로 사용 하고 Facelets 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>
.. 다음 기본 Facelets 템플릿으로 :
<!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>
참고 : JSF 2.2 이상을 사용하는 경우 위의 XHTML 스 니펫 http://xmlns.jcp.org
대신 네임 스페이스 도메인을 사용하십시오 http://java.sun.com
.
기존 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>
.. 페이지 템플리트를 포함하는 다음 기본 Facelets로 변경해야합니다.
<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>
참고 : JSF 2.2 이상을 사용하는 경우 위의 XHTML 스 니펫 http://xmlns.jcp.org
대신 네임 스페이스 도메인을 사용하십시오 http://java.sun.com
.
이 Mojarra Migration Guide에 설명 된대로 JSP TLD 파일을 Facelets TLD 파일로 변경해야합니다 .
마이그레이션 방식에 관계없이 faces-config.xml
새로운 JSF 2.0 주석 또는 CDI로 점진적으로 제거 할 수 있습니다 . 다음 <managed-bean>
으로 주석을 달 수 있습니다 @ManagedBean
.
@ManagedBean(name="managedBeanName")
@RequestScoped
public class SomeBean {}
옆에는 @RequestScoped
,이 또한 @ViewScoped
, @SessionScoped
및 @ApplicationScoped
가능합니다. 의 name
속성 을 생략 @ManagedBean
하면 기본적으로 첫 번째 문자가 소문자로 classname이됩니다.
@ManagedBean
@RequestScoped
public class SomeBean {}
이 특정 예에서는입니다 #{someBean}
.
다음을 <managed-property>
사용하여 주석을 달 수 있습니다 @ManagedProperty
.
@ManagedProperty("#{otherBean}")
private OtherBean otherBean;
다음을 <validator>
사용하여 주석을 달 수 있습니다 @FacesValidator
.
@FacesValidator("someValidator")
public class SomeValidator implements Validator {}
어떤을 <converter>
사용하여 주석이 될 수있다@FacesConverter
@FacesConverter("someConverter")
public class SomeConverter implements Converter {}
어떤을 <renderer>
사용하여 주석이 될 수있다@FacesRenderer
@FacesRenderer(componentFamily="someComponentFamily", rendererType="someRendererType")
public class SomeRenderer extends Renderer {}
<navigation-case>
XHTML 페이지의 파일 이름을 둘 다로 사용 <from-outcome>
하고 암시 적으로 수행 <to-view-id>
되므로 제거 할 수있는 모든 파일입니다 . 대상보기의 파일 이름과 일치하도록 모든 결과 값을 변경하여 점진적으로 수행 할 수 있습니다.
마지막으로, 모든 세션은 창을 더 표시 할 수 있습니다 / 같은 탭의 후속 요청에서 빈 데이터를 유지하는 유일한 이유는 세션에 넣어 된 콩을 범위 @ViewScoped
이 방법은 콩이 영향을받지 않습니다 때문에 최종 사용자가 열릴 때, 다른 탭 / 창의 동일한 페이지.
PrimeFaces / RichFaces / IceFaces와 같은 타사 컴포넌트 라이브러리는이 답변에서 고려하지 않습니다. 그러면 기본적으로 "의존"으로 귀결되기 때문에 신뢰할 수있는 답변을 작성하는 것이 불가능합니다. 일반적으로 지침에 따라 구성 요소 라이브러리를 자체 검증 된 JSF 2.0 호환 버전으로 업그레이드하는 것으로 충분합니다. 가장 좋은 방법은 단위 테스트를 작성하고 업그레이드 전후에 실행하고 문제를 개별적으로 수정하는 것입니다.
다음은 특정 구성 요소 라이브러리의 마이그레이션과 관련된 유용한 링크입니다.
PrimeFaces 1.x에 Facelets 1.x가 이미 필요하므로 PrimeFaces 1.x에서 2.x 로의 마이그레이션 안내서가 없습니다. 따라서 Facelets 1.x에서 2.x 로의 마이그레이션 단계 만 수행하면됩니다. 그러나 PrimeFaces 1.x에서 3.x (또는 그 이상)로 마이그레이션 할 때 적용 할 수 있는 PrimeFaces 2.x에서 3.x (이상) 로의 마이그레이션 안내서 가 있습니다. Tomahawk에는 마이그레이션 안내서도 없습니다. 기본적으로 변경해야 할 것은 JAR 뿐이며 필요한 경우 <t:saveState>
Bean보기의 범위를 지정하여 요청 범위 Bean 의 모든 참조를 제거 하십시오.
javax.faces.VALIDATE_EMPTY_FIELDS
매개 변수를 설정해야했습니다 false
. 또한보십시오 : stackoverflow.com/questions/6113935/…
JSF 1.2와 함께 JSTL을 사용하는 경우 JSF2로 업그레이드 할 때 네임 스페이스를 다음과 같이 변경해야합니다.
에:
JSF 2.0에는 많은 새로운 기능과 구성 요소가 있으며 마이그레이션이 고통스럽지 않다고 생각합니다. 타사 라이브러리를 사용하는 것이 어려운 영역 만 있습니다. 응용 프로그램이 Richfaces와 같은 라이브러리에 크게 의존하는 경우 문제가 발생합니다. Richfaces 3의 모든 구성 요소가 Richfaces 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 Trinidad를 사용하는 경우 JSF 2.0을 지원하도록 버전 2.0으로 업그레이드해야합니다. Hacker 's Valhalla에 더 많은 정보가 있습니다 .