FacesFileNotFoundException เมื่อใช้ IFrame ใน XHTML

ฉันได้รับ com.sun.faces.context.FacesFileNotFoundException ขณะใช้ IFRAME menuBar ในเบราว์เซอร์ตัวที่ 2

ฉันได้รับข้อผิดพลาดนี้เมื่อเข้าสู่เบราว์เซอร์อื่น

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.
-

exception

com.sun.faces.context.FacesFileNotFoundException: /xhtml/auth/faces/xhtml/client/clientImage.xhtml Not Found in ExternalContext as a Resource
    com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:232)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:273)
    com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209)
    com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114)
    com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    com.beo.importexport.filter.AuthFilter.doFilter(AuthFilter.java:64)
    org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
note The full stack trace of the root cause is available in the JBoss Web/7.0.13.Final logs.

JBoss Web/7.0.13.Final:

ฉันใช้เทมเพลตในหน้า XHTML หนึ่งหน้า ภายในเทมเพลตนั้นจะใช้ IFrame

iframe ประกอบด้วยแถบเมนูที่มีรายการเมนูบางรายการ

ปัญหาของฉันคือเมื่อเข้าสู่ระบบเว็บเบราว์เซอร์ตัวที่ 2 เซสชันมีการเปลี่ยนแปลง ดังนั้น SRC ใน IFRAME จึงนำหน้าเส้นทางเก่าไปยังเส้นทางฮาร์ดคอร์ด

แท็ก iframe src ของฉันด้านล่าง

     <iframe name="contentframe"   id="contentframe"  
            width="100%" height="710px"  
    src="faces/xhtml/client/clientImage.xhtml" 
            scrolling="auto"   
           style="overflow: auto;" >
     </iframe>

เหตุใดคำนำหน้าเส้นทางนี้จึงเกิดขึ้นใน SRC IFRAME


person Titus Kurian    schedule 23.11.2013    source แหล่งที่มา


คำตอบ (1)


เป็นเพราะ <iframe src> ของคุณแสดงถึง URL ที่เกี่ยวข้อง ไม่ได้ขึ้นต้นด้วยรูปแบบ (เช่น http://, https:// ฯลฯ) หรือด้วยเครื่องหมายทับ (/) URL สัมพัทธ์จะถูกตีความโดยสัมพันธ์กับ URL คำขอปัจจุบัน (อย่างที่คุณเห็นในแถบที่อยู่ของเบราว์เซอร์ หมายเหตุ: และดังนั้นจึงไม่เกี่ยวข้องกับตำแหน่งไฟล์จริงในระบบไฟล์ดิสก์ของเซิร์ฟเวอร์ อย่างที่ผู้เริ่มต้นหลายคนคิดผิด!)

ดังนั้น หาก URL คำขอคือ (เดาว่า /faces เป็นเส้นทางบริบท คุณไม่ชัดเจนในเรื่องนี้ คุณไม่ได้บอกอะไรเกี่ยวกับเส้นทางบริบทหรือ URL คำขอจริง หรือการแมป JSF) ตัวอย่างเช่น

http://example.com/faces/xhtml/auth/login.xhtml

ดังนั้น URL ที่เกี่ยวข้อง faces/xhtml/client/clientImage.xhtml จะถูกค้นหาในโฟลเดอร์เดียวกันของ URL คำขอปัจจุบัน ซึ่งส่งผลให้ URL นี้:

http://example.com/faces/xhtml/auth/faces/xhtml/client/clientImage.xhtml

ในขณะที่ยังคงถือว่า /faces เป็นเส้นทางบริบท แต่นี่จะทำให้เกิดข้อยกเว้นที่คุณได้รับ:

com.sun.faces.context.FacesFileNotFoundException: /xhtml/auth/faces/xhtml/client/clientImage.xhtml Not Found in ExternalContext as a Resource

คุณยังไม่ชัดเจนว่า URL ใดที่มีไฟล์ของ iframe จากข้อมูลที่ให้มา ฉันเดาได้ดีที่สุด

http://example.com/faces/xhtml/client/clientImage.xhtml

ถ้านี่เป็นเรื่องจริงคุณก็ควรใช้จริงๆ

<iframe src="/faces/xhtml/client/clientImage.xhtml" />

เครื่องหมายสแลชนำหน้า / จะทำให้มันถูกตีความโดยสัมพันธ์กับรูทโดเมน โดยไม่คำนึงถึง URL คำขอปัจจุบัน

person BalusC    schedule 23.11.2013
comment
ขอบคุณ BalusC แต่ฉันมีวิธีแก้ไขโดยใส่เส้นทางเช่นนี้ ‹iframe src=#{request.contextPath}/faces/xhtml/client/clientImage.xhtml /› - - person Titus Kurian; 25.11.2013
comment
@TitusKurian สวัสดี ฉันกำลังเผชิญกับปัญหาที่คล้ายกัน คุณกำหนด request ใน Managed Bean บ้างหรือเป็นนิพจน์ EL บ้าง แสดงความคิดเห็นหน่อยได้ไหม? - person user390525; 07.10.2017