2011-02-15 13 views
5

मेरे JSF 2 परियोजना संरचना इस प्रकार है:JSF2 और Facelets - java.io.FileNotFoundException

java.io.FileNotFoundException 
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:381) 
at com.sun.faces.facelets.impl.DefaultFaceletCache._getLastModified(DefaultFaceletCache.java:161) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.access$000(DefaultFaceletCache.java:62) 
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:82) 
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:79) 
at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:119) 
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62) 
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:248) 
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:366) 
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346) 
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199) 
at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155) 
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93) 
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:82) 
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:744) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

:

root 
... 
    WebContent 
     META-INF 
     resources 
     css 
     images 
     javascript 
    templates 
     commonLayout.xhtml 
     footer.xhtml 
     header.xhtml 
    views 
     main 
     index.xhtml 
    WEB-INF 
    index.jsp 

मैं इस त्रुटि जब मैं http://localhost/home/main/index.jsf पर मेरे पृष्ठ देखने का प्रयास मुठभेड़ index.xhtml की सामग्री है:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core"> 

<ui:composition template="templates/commonLayout.xhtml"> 
    <ui:define name="header"> 
     Add your header here or delete to use the default 
    </ui:define> 
    <ui:define name="content"> 
     Add your content here or delete to use the default 
    </ui:define> 
    <ui:define name="footer"> 
     Add your footer here or delete to use the default 
    </ui:define> 
</ui:composition> 
</html> 

मैं पिछले दो दिनों से इस मुद्दे पर फंस गया हूं। क्या कोई देख सकता है कि समस्या क्या है?

सबसे पहले, अपनी परियोजना संरचना गलत है: मैं सभी

उत्तर

7

दो चीजों को पता नहीं है। सभी वेब फ़ाइलों को वेबकंटेंट के अंदर जाना है।

root 
... 
    WebContent 
     META-INF 
     resources 
     css 
     images 
     javascript 
     templates 
     commonLayout.xhtml 
     footer.xhtml 
     header.xhtml 
     views 
     main 
      index.xhtml 
     WEB-INF 
     index.jsp 

हालांकि इस अपवाद के बजाय 404 त्रुटि उत्पन्न हुई होगी। तो मैं मानता हूं कि प्रश्न बनाने के दौरान यह सिर्फ आपकी लापरवाही थी।

दूसरा, ui:composition में पथ / से शुरू होता है, तो यह वेबकंटेंट के सापेक्ष है। लेकिन अगर यह / से शुरू नहीं होता है, तो यह वर्तमान फ़ाइल के सापेक्ष है। जैसा कि आपके पास वर्तमान में है, फेसलेट टेम्पलेट को /views/main/templates/commonLayout.xhtml से लोड करने का प्रयास करेगा जो वास्तव में गलत है। तो, अपने template पथ को निम्नानुसार ठीक करें:

<ui:composition template="/templates/commonLayout.xhtml"> 
+0

@ बाल्लूसी टिप के लिए धन्यवाद। मैं इस पूरे जेएसएफ 2 परियोजना सेटअप के बारे में थोड़ा उलझन में हूं। यह लिंक [लिंक] http://www.coreservlets.com/JSF-Tutorial/jsf2/# ओवरव्यू ने कहा कि सभी वेब फ़ाइलों को वेबकंटेंट के अंदर जाना है - जैसा आपने कहा था। एक और लिंक [लिंक] http://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/ वेबकंटेंट के बाहर वेब फ़ाइलों को उनके उदाहरण डाउनलोड में है। क्या आप मुझे एक आधिकारिक वेबसाइट पर इंगित कर सकते हैं जो इस बिंदु को और स्पष्ट रूप से समझाएगा। – ChuongPham

+0

@ बालससी मेरी आखिरी टिप्पणी को अनदेखा करें क्योंकि मैं इसे हटा नहीं सकता हूं। वैसे भी, मुझे लगता है कि उपरोक्त कोड स्वरूपण सही नहीं हुआ है, लेकिन मेरी सभी फ़ाइलें वेबकंटेंट फ़ोल्डर के अंतर्गत हैं। साथ ही, संसाधनों, टेम्पलेट्स, विचार फ़ोल्डरों को आवश्यकता के अनुसार वेब-आईएनएफ के तहत जाना चाहिए? या, क्या यह व्यक्तिगत वरीयता पर है? – ChuongPham

+0

वे वेबकंटेंट के बाहर नहीं हैं। फ़ोल्डर को सिर्फ 'वेबएप' नाम दिया गया है। फ़ोल्डर नाम के बारे में कोई कल्पना नहीं है, नाम "वेबकंटेंट" ग्रहण के लिए विशिष्ट है। अंत में, यह वही फ़ाइलें हैं जो servletcontainer के वेबैप रूट फ़ोल्डर में तैनात हैं। WEB-INF के रूप में, WEB-INF में फ़ाइलें सार्वजनिक पहुंच योग्य नहीं हैं, लेकिन वे सर्वलेट एपीआई द्वारा ही पहुंच योग्य हैं (requestdispatcher, include, आदि)। – BalusC

संबंधित मुद्दे