我在第二个浏览器中使用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中?
答案 0 :(得分:0)
这是因为您的<iframe src>
代表相对网址。它不是从方案开始的(例如http://
,https://
等),也不是斜杠(/
)。相对URL是相对于当前请求URL(您在浏览器的地址栏中看到的那个)进行解释的;注意:因此不会像服务器的磁盘文件系统中的物理文件位置那样,许多初学者错误地认为!)。
因此,如果请求URL是(猜测/faces
是上下文路径;您不清楚这一点,您没有说明上下文路径,也没有说明实际请求URL或JSF映射),例如,
然后将在当前请求网址的同一文件夹中搜索相对网址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是什么。根据目前提供的信息,我最好的猜测是
如果确实如此,那么你应该实际使用
<iframe src="/faces/xhtml/client/clientImage.xhtml" />
前导斜杠/
将使其相对于域根进行解释,而不管当前的请求URL。