जवाबों:
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">
नोट: जब आप सर्वलेट 3.0 या नए का उपयोग कर रहे हैं, तो उपरोक्त XML स्निपेट के http://xmlns.jcp.org
बजाय नेमस्पेस डोमेन का उपयोग करें http://java.sun.com
।
यदि आप JSP 2.x का उपयोग कर रहे हैं और इसका उपयोग करते रहना चाहते हैं , तो आपको मूल रूप से कुछ और बदलने की आवश्यकता नहीं है।
यदि आप पहले से ही , जैसे के url-pattern
लिए एक प्रत्यय का उपयोग कर रहे FacesServlet
हैं *.jsf
, तो यह जानना अच्छा है कि FacesServlet
इच्छाशक्ति पहले *.xhtml
फ़ाइल के लिए स्कैन करेगी और यदि यह मौजूद नहीं है, तो *.jsp
फ़ाइल के लिए स्कैन करें । यह आपको URL को बदलने के बिना पर्दे के पीछे धीरे-धीरे JSP से फेसलेट में बदलने के लिए कमरा प्रदान करता है।
लेकिन अगर आप एक उपसर्ग का उपयोग कर रहे हैं url-pattern
, जैसे कि /faces/*
और आप धीरे-धीरे JSP से फेसलेट्स में अपग्रेड करना चाहते हैं, तो आपको वास्तव में इसे बदलना होगा *.jsf
और संभवतः मौजूदा JSP पृष्ठों के सभी लिंक भी।
आपको केवल यह ध्यान रखना होगा कि नया JSF 2.0 प्रदान किया गया निहितार्थ फ़ाइल की उपस्थिति के लिए स्कैन नहीं करता है, यह outcome.xhtml
वैसे भी जाएगा। इसलिए यदि आप इसमें से आना चाहते हैं या जाना चाहते हैं *.jsp
, तो आपको अभी भी इसे JSF 1.x तरीके से व्यूइड में शामिल करना होगा।
यदि आप फेसलेट्स 1.x का उपयोग प्रौद्योगिकी के रूप में कर रहे हैं और JSF 2.0 आपूर्ति किए गए फेसलेट्स 2.0 का उपयोग करना चाहते हैं , तो आपको निम्नलिखित अतिरिक्त कदम करने की आवश्यकता है:
/WEB-INF/lib
।FaceletViewHandler
से निकालें faces-config.xml
।FaceletViewHandler
विस्तार करने के लिए किसी भी कस्टम कार्यान्वयन को अपडेट करने की आवश्यकता है ViewHandlerWrapper
।<context-param>
मान web.xml
जिसमें से फेसलेट्स 2.0 में पहले से ही डिफ़ॉल्ट हैं, जैसे के javax.faces.DEFAULT_SUFFIX
मूल्य के साथ *.xhtml
।फेसलेट 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 या नए का उपयोग कर रहे हैं, तो उपरोक्त XML स्निपेट के http://xmlns.jcp.org
बजाय नेमस्पेस डोमेन का उपयोग करें http://java.sun.com
।
यह मूल रूप से होना चाहिए।
यदि आप JSP 2.x को दृश्य तकनीक के रूप में उपयोग कर रहे हैं और आप तुरंत फेसलेट्स 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>
ध्यान दें: जब आप 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>
..शो में बदलकर निम्नलिखित मूल फेसलेट्स में शामिल किया जाना चाहिए:
<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 माइग्रेशन गाइड में वर्णित 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
, तो यह 1 char के निचले स्तर के साथ 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>
जो दोनों के रूप में एक्सएचटीएमएल पेज के फ़ाइल नाम का उपयोग करता है <from-outcome>
और <to-view-id>
इसे हटाया जा सकता है क्योंकि यह अंतर्निहित रूप से किया जाएगा। यह धीरे-धीरे लक्ष्य दृश्य के फ़ाइल नाम से मेल खाने के लिए सभी परिणाम मानों को बदलकर किया जा सकता है।
अंत में, किसी भी सत्र में सेम सेम, जिसे सत्र में एक ही टैब / विंडो में बाद के अनुरोधों में सेम डेटा को बनाए रखने के एकमात्र कारण के साथ रखा गया है, को बेहतर तरीके से चिह्नित किया जा सकता है @ViewScoped
, क्योंकि एंड्यूसर खुलने पर इस तरह से सेम प्रभावित नहीं होगा विभिन्न टैब / विंडो में एक ही पृष्ठ।
ध्यान दें कि मैं इस जवाब में प्राइमफेस / रिचफेसेस / आइसफेसेस जैसी किसी भी 3 पार्टी पोटेंशियल लाइब्रेरियों को नहीं लेता हूं, फिर एक विश्वसनीय उत्तर लिखना असंभव होगा क्योंकि यह मूल रूप से "यह निर्भर करता है" पर उबलता है। सामान्य तौर पर यह केवल अपने निर्देश के अनुसार, स्वयं-सत्यापित- JSF 2.0 संगत संस्करण में घटक लाइब्रेरी को अपग्रेड करने के लिए पर्याप्त है। सबसे अच्छा सिर्फ यूनिट टेस्ट लिखना है, उन्हें अपग्रेड से पहले और बाद में चलाएं और व्यक्तिगत रूप से किसी भी मुद्दे को ठीक करें।
यहाँ विशिष्ट घटक पुस्तकालय के प्रवास के संबंध में कम से कम कुछ उपयोगी लिंक दिए गए हैं:
PrimeFaces के पास PrimeFaces 1.x से 2.x के लिए माइग्रेशन गाइड नहीं है क्योंकि PrimeFaces 1.x के लिए पहले से ही फेसलेट्स 1.x की आवश्यकता है, इसलिए आपको बस फेसएक्स 1.x से 2.x माइग्रेशन चरणों का पालन करना होगा। हालाँकि, एक प्राइमफेस 2.x से 3.x (और उच्चतर) माइग्रेशन गाइड है, जो प्राइमफेस 1.x से 3.x (या उच्चतर) पर माइग्रेट करने पर भी लागू हो सकता है। टॉमहॉक का कोई माइग्रेशन गाइड भी नहीं है। मूल रूप से एकमात्र जिसे आपको बदलने की आवश्यकता है, वह JAR है और यदि आवश्यक हो तो सभी <t:saveState>
अनुरोधों से छुटकारा पाने के लिए बीन के दृश्य को स्कूप किया गया।
javax.faces.VALIDATE_EMPTY_FIELDS
करने के false
लिए पैरामीटर भी सेट करना पड़ा । इसे भी देखें: stackoverflow.com/questions/6113935/…
उल्लेख करने के लिए एक बात यह है कि अगर कोई JSF 1.2 के साथ JSTL का उपयोग कर रहा है, तो JSF2 में अपग्रेड करते समय आपको निम्न नामों को बदलना चाहिए:
सेवा:
JSF 2.0 में कई नई विशेषताएं और घटक हैं और मुझे नहीं लगता कि प्रवास दर्दनाक होगा। थ्रिल पार्टी लाइब्रेरियों का उपयोग करने में केवल आपको कठिन क्षेत्र मिलेगा। यदि आपका आवेदन रिचफेक्स जैसे पुस्तकालयों पर बहुत अधिक निर्भर है तो आपको समस्या का सामना करना पड़ेगा। रिचफेसेस 3 से सभी घटकों को रिचफेसेस 4 में नहीं रखा गया है।
यह JSF 2.0 के लिए JSF 1.2 एप्लिकेशन माइग्रेशन में भी मदद कर सकता है
यह भी जांचें कि जेएसएफ 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">
यदि आप अपाचे त्रिनिदाद का उपयोग कर रहे हैं तो आपको इसे संस्करण 2.0 में अपग्रेड करना होगा ताकि यह JSF 2.0 को सपोर्ट करे। हैकर के वल्लाह में अधिक जानकारी है ।