如果我指定这样的错误页面:
<error-page>
<error-code>404</error-code>
<location>/pages/not-found.html</location>
</error-page>
并点击网址localhost:8080/app/something/else
(返回404错误),然后浏览器上的网址仍为localhost:8080/app/something/else
,而错误网页的内容会转储到浏览器上。这里的问题是,如果我指定任何这样的css资源:
<link type="text/css" rel="stylesheet" href="resources/css/bootstrap.css" />
然后,浏览器尝试加载localhost:8080/app/something/else/resources/css/bootstrap.css
而不是localhost:8080/app/resources/css/bootstrap.css
,这显然会失败。我们也不能使用
<link type="text/css" rel="stylesheet" href="/resources/css/bootstrap.css" />
然后浏览器将加载localhost:8080/resources/css/bootstrap.css
基本问题是相对路径取决于URL中的斜杠数。
在我看来,如果我可以 将 页面重定向到/pages/not-found.html,那么我可以指定css文件的一致路径(不用担心URL中的斜杠数量
答案 0 :(得分:0)
如果您正在谈论 JSF-Application ,也许您可以使用phaselistener:
在phaselistener中,您可以让JSF完成其工作并捕获java.io.FileNotFoundException。如果发生异常您可以将用户转发到特殊站点:
FacesContext context = event.getFacesContext();
context.getExternalContext().redirect("/pages/not-found.html");
答案 1 :(得分:0)
你应该使用它 用于CSS文件
<h:outputStylesheet library="css" name="bootstrap.css"/>
和javascript文件
<h:outputScript library="js" name="bootstrap.js"/>
或者如果您想使用
<link type="text/css" rel="stylesheet" href="#{request.contextPath}/resources/css/bootstrap.css" />
但最好首先使用它