在XHTML中使用IFrame时FacesFileNotFoundException

时间:2013-11-23 04:32:06

标签: jsf iframe

我在第二个浏览器中使用IFRAME menuBar时收到com.sun.faces.context.FacesFileNotFoundException。

在使用其他浏览器时出现此错误。

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页面中使用了一个templage。 在那里,使用了IFrame。

iframe包含一个带有一些菜单项的菜单栏。

我的问题是当登录第二个Web浏览器时,会话已更改,因此IFRAME中的SRC将旧路径添加到硬编号路径前面。

我的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中?

1 个答案:

答案 0 :(得分:0)

这是因为您的<iframe src>代表相对网址。它不是从方案开始的(例如http://https://等),也不是斜杠(/)。相对URL是相对于当前请求URL(您在浏览器的地址栏中看到的那个)进行解释的;注意:因此不会像服务器的磁盘文件系统中的物理文件位置那样,许多初学者错误地认为!)。

因此,如果请求URL是(猜测/faces是上下文路径;您不清楚这一点,您没有说明上下文路径,也没有说明实际请求URL或JSF映射),例如,

  

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

然后将在当前请求网址的同一文件夹中搜索相对网址faces/xhtml/client/clientImage.xhtml,从而生成此网址:

  

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

您还不清楚iframe文件的确切URL是什么。根据目前提供的信息,我最好的猜测是

  

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

如果确实如此,那么你应该实际使用

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

前导斜杠/将使其相对于域根进行解释,而不管当前的请求URL。