Mojarra 2.2.12समझौता FacesContext प्रारंभ विवरण
यहाँ FacesContext की इन्स्टेन्शियशन पदभार संभालने के कोड का टुकड़ा है। एक बार हमें अनुरोध मिलने के बाद, हम इससे वैश्विक जानकारी प्राप्त करते हैं और इसका उपयोग करके FacesContext
इंस्टेंस बनाते हैं। तो, प्रत्येक अनुरोध के लिए उदाहरण बनाया गया है। लेकिन facesContextFactory
के इरादे को प्राप्त करना मुझे और अधिक मुश्किल लग रहा था।
// Acquire our FacesContextFactory instance
try {
facesContextFactory = (FacesContextFactory)
FactoryFinder.getFactory
(FactoryFinder.FACES_CONTEXT_FACTORY);
} catch (FacesException e) {
//others
}
कहाँ FactoryFinder
के लिए
String javax.faces.FactoryFinder.FACES_CONTEXT_FACTORY = "javax.faces.context.FacesContextFactory"
Javadocs इसलिए सभी कारखाने वस्तुओं जावा सर्वर में निर्दिष्ट के लिए
मानक खोज एल्गोरिथ्म बुलाया का वर्णन एपीआई चेहरे।
यह है कि मैं क्या से उलझन में था। javax.faces.FactoryFinderInstance#getFactory(String factoryName)
try {
factoryOrList = factories.get(factoryName);
if (!(factoryOrList instanceof List)) {
return factoryOrList;
}
} finally {
lock.readLock().unlock();
}
factories
क्षेत्र आरंभ नहीं हो जाता के रूप में इस प्रकार है copyInjectionProviderFromFacesContext():
अब, चलो वास्तविक तरीका है कि कारखाने उदाहरण बनाता है पर विचार करें
private void copyInjectionProviderFromFacesContext() {
InjectionProvider injectionProvider = null;
FacesContext context = FacesContext.getCurrentInstance(); //USE FACES CONTEXT!!!!!
if (null != context) {
injectionProvider = (InjectionProvider) context.getAttributes().get("com.sun.faces.config.ConfigManager_INJECTION_PROVIDER_TASK");
}
if (null != injectionProvider) {
factories.put(INJECTION_PROVIDER_KEY, injectionProvider);
} else {
if (LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.log(Level.SEVERE, "Unable to obtain InjectionProvider from init time FacesContext. Does this container implement the Mojarra Injection SPI?");
}
}
}
तो, FacesContext
उदाहरण का इस्तेमाल किया बनाने, लेकिन कारखाने का उपयोग FacesContext
बनाने के लिए किया जाता है। क्या आप उस चक्र को समझा नहीं सकते?
तो, यह InitFacesContext बनाने का मामला है: 'FacesContextFactory PrivateFacesContextFactory = (FacesContextFactory) FactoryFinder.getFactory ("com.sun.faces.ServletContextFacesContextFactory"); '? यह [Mojarra 2.2.4] में प्रकट नहीं होता (http://grepcode.com/file/repo1.maven.org/maven2/com.sun.faces/jsf-api/2.2.4/javax/faces/ संदर्भ/FacesContext.java # FacesContext.getCurrentInstance% 28% 29) हालांकि ... –
नहीं, यह 'FacesInitializer' में बनने वाले। मेरे उत्तर में "बनाए गए" लिंक पर क्लिक करें। – BalusC
मैं जीएफएफ से संबंधित त्रुटि प्राप्त कर रहा हूं जब जीएफ 4.1.1 पर स्प्रिंग ऐप चलाने के लिए मोजररा के किसी भी संदर्भ के बिना: जानकारी: वेब मॉड्यूल [शून्य] ServletContext.log(): क्लासपाथ जानकारी पर कोई वसंत वेब अनुप्रयोग प्रारंभिक प्रकार नहीं मिला : Mojarra 2.2.12 शुरु कर रहा है संदर्भ के लिए '/sm-shop-2.0.3-SNAPSHOT' गंभीर: init समय FacesContext से InjectionProvider प्राप्त करने में असमर्थ। क्या यह कंटेनर मोजरा इंजेक्शन एसपीआई लागू करता है? गंभीर: @PreDestroy एनोटेटेड विधियों को कॉल करने में असमर्थ क्योंकि कोई इंजेक्शनप्रोवाइडर नहीं पाया जा सकता है। क्या यह कंटेनर मोजरा इंजेक्शन एसपीआई लागू करता है? – developer10