Yanıtlar:
JSF 1.2'yi 2.0'a yükseltmenin acısı, şu anda kullandığınız ve kullanmak istediğiniz görünüm teknolojisine bağlıdır.
Görünüm teknolojisi anahtarından bağımsız olarak, en azından aşağıdaki adımlar gerçekleştirilmelidir:
/WEB-INF/lib
(varsa) kaldırın ./WEB-INF/lib
JAR'ı bırakın (JSF 1.2 sunucu uygulaması sağlayıcısı tarafından sağlanmışsa, sunucu uygulaması kitaplıklarından önce webapp kitaplıklarını yüklemek için sınıf yükleme ilkesini değiştirmek isteyebilirsiniz, ayrıca bkz . Uygulama sunucularında JSF2 sınıflandırma sorunları ).faces-config.xml
JSF 2.0 spesifikasyonuna uymak için kök bildirimini güncelleyin .
<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">
Not: JSF 2.2 veya daha yenisini kullanırken , yukarıdaki XML snippet'i http://xmlns.jcp.org
yerine ad alanı etki alanını kullanın http://java.sun.com
.
Kök bildiriminin en azından Servlet 2.5 ile web.xml
uyumlu olduğundan emin olun . JSF 2.0 2.4 veya daha düşük sürümlerde çalışmaz ( hacklenebilir olsa da ).
<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">
Not: Servlet 3.0 veya daha yenisini kullanırken , yukarıdaki XML snippet'i http://xmlns.jcp.org
yerine ad alanı etki alanını kullanın http://java.sun.com
.
JSP 2.x kullanıyorsanız ve kullanmaya devam etmek istiyorsanız , temelde başka bir şey değiştirmeniz gerekmez.
Zaten bir sonek kullanıyorsanız url-pattern
için FacesServlet
, gibi *.jsf
, o 's iyi olduğunu bilmek FacesServlet
ilk tarar *.xhtml
dosya ve değil varsa, o zaman için tarama *.jsp
dosyası. Bu, URL'leri değiştirmeden yavaş yavaş perde arkasındaki JSP'den Facelets'e geçiş yapmanızı sağlar.
Ancak url-pattern
, gibi bir önek kullanıyorsanız /faces/*
ve yavaş yavaş JSP'den Facelets'e yükseltmek istiyorsanız, o zaman gerçekten *.jsf
mevcut JSP sayfalarındaki tüm bağlantıları ve muhtemelen tüm bağlantıları değiştirmeniz gerekir .
Yalnızca, örtülü gezinmenin sağlanan yeni JSF 2.0'ın dosyanın varlığını taramadığını, yine de gideceğini unutmayın outcome.xhtml
. Eğer gelmek ya da gitmek *.jsp
istiyorsanız, o zaman hala JSF 1.x şekilde viewid'e eklemeniz gerekir.
Eğer kullanıyorsanız Facelets 1.x görünümü teknoloji olarak ve MTU 2.0 sağlanan kullanmak istiyorum Facelets 2.0 , daha sonra aşağıdaki ek adımları yapmanız gerekir:
/WEB-INF/lib
.FaceletViewHandler
dan faces-config.xml
.FaceletViewHandler
uygulamaların güncellenmesi gerekir ViewHandlerWrapper
.<context-param>
değerleri kaldırın .web.xml
javax.faces.DEFAULT_SUFFIX
*.xhtml
Mevcut Facelet taglib XML'lerinin kök bildirimini Facelets 2.0'a uyacak şekilde güncelleyin.
<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">
Not: JSF 2.2 veya daha yenisini kullanırken , yukarıdaki XML snippet'i http://xmlns.jcp.org
yerine ad alanı etki alanını kullanın http://java.sun.com
.
Temelde bu olmalı.
Görüntüleme teknolojisi olarak JSP 2.x kullanıyorsanız ve hemen Facelets 2.0'a yükseltmek istiyorsanız , sitenin yayınlanabilmesi için çok fazla değişiklik yapmanız gerekir. Temel olarak burada görüntüleme teknolojisini değiştiriyorsunuz.
Her kalıp sayfada aşağıdaki temel JSP şablonunu değiştirmeniz gerekir.
<%@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>
.. aşağıdaki temel Facelets şablonuna:
<!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>
Not: JSF 2.2 veya daha yenisini kullanırken , yukarıdaki XHTML snippet'leri http://xmlns.jcp.org
yerine ad alanı etki alanını kullanın http://java.sun.com
.
Mevcut JSP sayfalarınız iyi tasarlanmışsa, komut dosyası kod satırı içermemeli ve yalnızca <jsp:include>
tek JSP'ye özgü etiketi olmalıdır. Bunlardan herhangi birinin aşağıdakilerden değiştirilmesi gerekir:
<jsp:include page="include.jsp" />
için
<ui:include src="include.xhtml" />
Temel JSP, sayfa şablonunu içerir ..
<%@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>
.. aşağıdaki temel Facelets sayfa şablonunu içerecek şekilde değiştirilmelidir:
<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>
Not: JSF 2.2 veya daha yenisini kullanırken , yukarıdaki XHTML snippet'leri http://xmlns.jcp.org
yerine ad alanı etki alanını kullanın http://java.sun.com
.
Bu Mojarra Geçiş Kılavuzu'nda açıklandığı gibi JSP TLD dosyalarını Facelets TLD dosyalarına değiştirmeniz gerekir .
Geçiş yaklaşımından bağımsız olarak, faces-config.xml
yeni JSF 2.0 ek açıklamalarını veya hatta CDI'yi aşamalı olarak kaldırabilirsiniz . Herhangi bir <managed-bean>
açıklama ekleyebilir @ManagedBean
:
@ManagedBean(name="managedBeanName")
@RequestScoped
public class SomeBean {}
Yanında @RequestScoped
, orada da @ViewScoped
, @SessionScoped
ve @ApplicationScoped
mevcut. Öğesinin name
özniteliğini atlarsanız, @ManagedBean
varsayılan olarak 1. karakter küçük harfle sınıf adına atanır.
@ManagedBean
@RequestScoped
public class SomeBean {}
Bu özel örnekte, olacaktır #{someBean}
.
Herhangi <managed-property>
biri kullanılarak açıklama eklenebilir @ManagedProperty
:
@ManagedProperty("#{otherBean}")
private OtherBean otherBean;
Herhangi <validator>
biri kullanılarak açıklama eklenebilir @FacesValidator
:
@FacesValidator("someValidator")
public class SomeValidator implements Validator {}
Herhangi <converter>
biri kullanılarak açıklama eklenebilir@FacesConverter
@FacesConverter("someConverter")
public class SomeConverter implements Converter {}
Herhangi <renderer>
biri kullanılarak açıklama eklenebilir@FacesRenderer
@FacesRenderer(componentFamily="someComponentFamily", rendererType="someRendererType")
public class SomeRenderer extends Renderer {}
Herhangi <navigation-case>
hem de XHTML sayfanın dosya adını kullanır <from-outcome>
ve <to-view-id>
bu edilecektir beri kaldırılabilir örtük yapılır. Bu, tüm sonuç değerlerini hedef görünümün dosya adıyla eşleşecek şekilde değiştirerek kademeli olarak yapılabilir.
Son olarak, aynı sekmede / pencerede sonraki isteklerde fasulye verilerini tutmak için tek nedenle oturuma yerleştirilen herhangi bir oturum kapsamındaki fasulye daha iyi işaretlenebilir @ViewScoped
, çünkü bu şekilde uç kullanıcı açıldığında fasulye etkilenmez aynı sekmeyi farklı sekmelerde / pencerelerde görebilirsiniz.
Bu cevapta PrimeFaces / RichFaces / IceFaces gibi herhangi bir üçüncü taraf bileşen kütüphanesini dikkate almadığımı, daha sonra temelde "duruma bağlı" olduğundan güvenilir bir cevap yazmak imkansız olacağını unutmayın. Genel olarak, bileşen kitaplığını, talimatlarına uygun olarak, yalnızca kendileri doğrulanmış JSF 2.0 uyumlu bir sürüme yükseltmek yeterlidir. En iyisi sadece birim testleri yazmak, yükseltmeden önce ve sonra çalıştırmak ve sorunları tek tek düzeltmektir.
Aşağıda, belirli bileşen kitaplığının taşınmasıyla ilgili en azından bazı yararlı bağlantılar verilmiştir:
PrimeFaces 1.x, zaten Facelets 1.x gerektirdiğinden, PrimeFaces 1.x - 2.x için geçiş kılavuzuna sahip değildir, bu yüzden sadece Facelets 1.x - 2.x geçiş adımlarını takip etmeniz gerekir. Ancak, PrimeFaces 1.x'ten 3.x'e (veya daha yüksek) geçiş için de geçerli olabilecek bir PrimeFaces 2.x - 3.x (ve üstü) geçiş kılavuzu vardır. Tomahawk'un göç rehberi de yoktur. Temel olarak değiştirmeniz gereken tek şey JAR'lardır ve gerekirse <t:saveState>
fasulye görünümünü kapsamlandırarak isteğe bağlı bir fasulye üzerindeki tüm referanslardan kurtulun .
javax.faces.VALIDATE_EMPTY_FIELDS
parametre ayarlamak zorunda kaldı false
. Ayrıca bakınız: stackoverflow.com/questions/6113935/…
Birisi JSTL JSF 1.2 ile kullanıyorsa, o zaman JSF2'ye yükseltme yaparken ad alanını şu şekilde değiştirmeniz gerekir:
için:
JSF 2.0'ın birçok yeni özelliği ve bileşeni var ve göçün acı verici olacağını düşünmüyorum. Sadece zor bulacağınız alan üçüncül kütüphane kullanmaktır. Uygulamanız büyük ölçüde Richfaces gibi kütüphanelere bağımlıysa sorunla karşılaşırsınız. Richfaces 3'teki tüm bileşenler Richfaces 4'e taşınmaz.
Bu ayrıca JSF 1.2 uygulamasının JSF 2.0'a geçişine yardımcı olabilir
Ayrıca bunu kontrol edin JSF 2'deki yenilikler nelerdir?
web.xml
Add the jars
1. jsf-api-2.0.jar
2. jsf-impl.2.0.2.jar
1. Adım: web.xml dosyasını değiştirin
<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>
Adım 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>
Adım 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 kullanıyorsanız, JSF 2.0'ı desteklemesi için onu sürüm 2.0'a yükseltmeniz gerekir. Hacker'ın Valhalla'sında daha fazla bilgi var .