【问题标题】:JSF: Hyperlink to webpage in /webapp subdirectoryJSF:超链接到 /webapp 子目录中的网页
【发布时间】:2011-01-31 17:18:45
【问题描述】:

我的 /src/main/webapp/pages/ 文件夹中有一个 .xhtml 页面列表。 现在我想为它们创建超链接。目前唯一有效的是默认主页:/src/main/webapp/pages/default.xhtml。

  <!-- Welcome page -->
  <welcome-file-list>
    <welcome-file>/pages/default.xhtml</welcome-file>
  </welcome-file-list>

  <!-- JSF mapping -->
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- Map these files with JSF -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

对于其他人,如果我有如下链接:

<a href="/pages/page1.xhtml">Page 1</a>

我收到以下错误:

/page1.xhtml 未在 ExternalContext 作为资源

我的问题是:如何在 相对于 webapp 根目录的 href 中指定我想要的页面。

【问题讨论】:

    标签: web-applications jsf hyperlink directory


    【解决方案1】:

    关于相对链接(即不以 http:// 开头的链接)您需要了解的两个主要事项:

    • 以斜杠 / 开头的相对链接是相对于域根的。
    • 没有前导斜杠的相对链接是相对于请求 URL 的(因为它在浏览器地址栏中)。

    如果当前 URL 是 http://example.com/app 并且页面包含链接

    <a href="/pages/page1.xhtml">
    

    然后它将指向http://example.com/pages/page1.xhtml(失败)。


    如果当前 URL 是 http://example.com/app 并且页面包含链接

    <a href="pages/page1.xhtml">
    

    然后它将指向http://example.com/app/pages/page1.xhtml(有效)。


    如果当前 URL 是 http://example.com/app/pages/default.xhtml 并且页面包含链接

    <a href="pages/page1.xhtml">
    

    然后它将指向http://example.com/app/pages/pages/page1.xhtml(失败)。


    您的问题是欢迎页面是通过转发而不是重定向打开的。这样,浏览器地址栏中的请求 URL 将保留在 http://example.com/app 上,而实际上显示的是 http://example.com/app/pages/default.xhtml 的内容。要使链接在所有情况下都能正常工作,您需要一个类似的链接

    <a href="/app/pages/page1.xhtml">
    

    因此,包括上下文路径,即 webapp 根目录。如果您唯一的问题是您想动态包含上下文路径,那么只需打印 HttpServletRequest#getContextPath()

    <a href="#{request.contextPath}/pages/page1.xhtml">
    

    另见:

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2012-09-18
      相关资源
      最近更新 更多