5 ответов:
мучительность
болезненность обновления JSF 1.2 до 2.0 зависит от технологии просмотра, которую вы используете в настоящее время и которую вы хотите использовать.
- JSP 2.x в JSP 2.x = почти никаких усилий.
- Facelets 1.x для Facelets 2.0 = мало усилий.
- JSP 2.x для Facelets 2.0 = много усилий. Двойной это, если у вас также есть пользовательские компоненты.
основные изменения
независимо от посмотреть переключатель технологий,по крайней мере необходимо выполнить следующие действия:
- удалить JSF 1.2 JAR из
/WEB-INF/lib(если таковые имеются).- Drop JSF 2.0 JAR в
/WEB-INF/lib(если JSF 1.2 был поставлен servletcontainer, вы можете изменить политику загрузки классов, чтобы загрузить библиотеки webapp сначала перед библиотеками servletcontainer, см. Также проблемы с загрузкой классов 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">убедитесь, что корневое объявление
web.xmlуже отвечает по крайней мере сервлет 2.5. В JSF 2.0 не будет работать на 2.4 или ниже (хотя это hackable).<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">
JSP 2.x в JSP 2.x
если вы используете JSP 2.x и хотите сохранить используя его, то вам в основном не нужно ничего менять еще.
постепенно модернизируя
если вы уже используете суффикс
url-patternнаFacesServlet, как*.jsf, тогда хорошо знать, чтоFacesServletбудет сначала сканировать*.xhtmlфайл и если его нет, то сканировать на . Это дает вам возможность постепенно конвертировать из JSP в Facelets за кулисами без изменения URL-адреса.но если вы используете префикс
url-pattern, как/faces/*и вы хотите постепенно модернизировать от JSP до Facelets, тогда вам действительно нужно изменить его на*.jsfи, возможно, также все ссылки на существующих страницах JSP.вам нужно только иметь в виду, что новый JSF 2.0 при условии неявной навигации не проверяет наличие файла, он будет идти в
outcome.xhtmlв любом случае. Так что если вы хотите прийти или пойти в*.jsp, то вам все равно нужно включить его в viewid JSF 1.х путь.
Facelets 1.x для Facelets 2.0
если вы используя Facelets 1.x как технология просмотра и хотите использовать JSF 2.0 поставляется Facelets 2.0, то вам нужно сделать следующие дополнительные шаги:
- Удалить Грани 1.X JAR от
/WEB-INF/lib.- Удалить Грани 1.x
FaceletViewHandlerСfaces-config.xml.- пользовательские
FaceletViewHandlerреализация должна быть обновлена, чтобы продлитьViewHandlerWrapperвместо.- не обязательно, но только для очистки, удалить любые другие 1.связанных с х
<context-param>значенияweb.xmlкоторые уже по умолчанию в Facelets 2.0, какjavax.faces.DEFAULT_SUFFIXстоимостью*.xhtml.корень декларация обновление существующих экземпляры facelet библиотеки тегов в XML выполнить Фейслетов 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">это должно быть в основном.
JSP 2.x для Facelets 2.0
если вы используете 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>включить изменения страницы
если ваши существующие страницы 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>пользовательские изменения компонентов
вам нужно изменить файлы JSP TLD на Facelets TLD файлы, как описано в этом Руководство По Миграции Mojarra.
после
независимо от подхода миграции, вы можете постепенно ликвидировать the
faces-config.xmlпо новым аннотациям JSF 2.0. Любой<managed-bean>может быть аннотирован@ManagedBean:@ManagedBean(name="managedBeanName") @RequestScoped public class SomeBean {}рядом с
@RequestScoped, есть еще@ViewScoped,@SessionScopedи@ApplicationScopedдоступен. Если вы опустите на@ManagedBean, то он будет по умолчанию classname с 1-м символом в нижнем регистре.@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>можно удалить, так как это будет имплицитно сделано. Это можно сделать постепенно, изменив все значения результата в соответствии с именем файла целевого представления.наконец, любой бин с областью действия сеанса, который был помещен в сеанс с единственной целью сохранить данные bean в последующих запросах в той же вкладке / окне можно лучше отметить
@ViewScoped, потому что таким образом Боб не будет затронут, когда конечный пользователь открывает одну и ту же страницу в разных вкладках/окнах.
библиотеки компонентов
обратите внимание, что я не принимаю во внимание никакие сторонние компонентные библиотеки, такие как PrimeFaces/RichFaces/IceFaces в этом ответе, тогда было бы невозможно написать надежный ответ, так как он в основном сводится к "это зависит". В общем, достаточно просто обновить библиотеку компонентов до версии, совместимой с JSF 2.0, в соответствии с их инструкциями. Лучше всего просто написать модульные тесты, запустить их до и после обновления и исправить любые проблемы по отдельности.
вот, по крайней мере, некоторые полезные ссылки в отношении миграции конкретной библиотеки компонентов:
- RichFaces Руководство По Миграции-3.3.х - 4.икс миграция
- IceFaces 2 Wiki-IceFaces 1.X руководство по совместимости
PrimeFaces не имеет руководства по миграции для PrimeFaces 1.x - 2.x как PrimeFaces 1.для x требуются фасеты 1.x уже, так что вы просто должны следовать Facelets 1.x - 2.х этапов миграции. Тем не менее, есть PrimeFaces 2.x - 3.X руководство по миграции который может применяться также при миграции из PrimeFaces 1.x - 3.x. Tomahawk также не имеет руководства по миграции. В основном единственное, что вам нужно изменить, это банки и при необходимости избавиться от всех
<t:saveState>ссылки на Бин с областью запроса, делая вид Бина с областью действия.
следует отметить, что если кто-то использует JSTL с JSF 1.2, то при обновлении до JSF2 вы должны изменить пространство имен с:
to:
JSF 2.0 имеет много новых функций и компонентов, и я не чувствую, что миграция будет болезненной. Единственная область, которую вы найдете трудной, - это использование библиотек thrid party. Если ваше приложение сильно зависит от библиотек, таких как 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: изменить веб.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, вам также придется обновить его до версии 2.0, чтобы он поддерживал JSF 2.0. Там больше информации на Валгалла хакера.
Comments