【问题标题】:Absolute path name in my template to get resources在我的模板中获取资源的绝对路径名
【发布时间】:2011-11-14 14:56:34
【问题描述】:

在我的 JSF 2.0 Facelets 应用程序中,我有一个出色的模板,我希望所有页面都使用它。它位于 web 应用程序的根目录中,名称为 template.xhtml。所以它的引用正如你所期望的那样:

<ui:composition template="./template.xhtml">

不过,我会时不时地导航到子目录中的客户端文件。由于不同的权限级别,以这种方式组织它们很有用。这些子目录中的 facelets 将引用相同的模板,如下所示:

<ui:composition template="../template.xhtml">

到目前为止一切顺利。但是在模板的标题中,我像这样拉入 css:

<link href="./resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="./resources/css/tableLayout.css" rel="stylesheet" type="text/css" />
<link href="../resources/css/default.css" rel="stylesheet" type="text/css" />
<link href="../resources/css/tableLayout.css" rel="stylesheet" type="text/css" />

冗余引用的原因是我还没有找到任何其他方法来让模板从根目录或子目录的上下文中工作。以 / 开头的路径名不起作用,除非您像这样将应用程序名称放入其中

/TheApp-Ver1_0/resources/css/default.css

这样做的问题是绝对路径名以变量而不是常量开头。该变量取决于应用程序在容器中的部署方式。有什么干净的方法可以解决这个问题吗?

我做了一些搜索来找到这个问题。诚实的。但是,我怀疑这是 另一个 BalusC 突然出现的问题之一,它提供了一个链接,指向我错过的某个地方广泛讨论的令人眼花缭乱的解决方案。

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    &lt;ui:composition&gt; 中的 template 路径是相对于 webapp 自己的文件夹结构,而不是域根目录(因为它不代表 URL!)。因此,如果您以/ 开头,它只是相对于上下文根进行解析。

    <ui:composition template="/WEB-INF/inc/template.xhtml">
    

    (输入/WEB-INF的好处是终端用户无法通过猜测URL直接打开)

    &lt;h:outputStylesheet&gt;&lt;h:outputScript&gt;&lt;h:graphicImage&gt;name 路径始终相对于/resources 根文件夹,无论您是否以/ 开头。

    <h:outputStylesheet name="css/default.css" />
    <h:outputScript name="js/default.js" />
    <h:graphicImage name="img/logo.png" />
    

    如果您出于某种原因想使用纯 HTML 而不是 JSF 组件来包含 CSS/JS/图像,那么最好自己在路径前加上 #{request.contextPath},这样您就可以使其成为域相关 URL,这样您就不需要摆弄上下文相关的 URL。另见:How get the base URL?

    【讨论】:

    • 你又做了一次。我注意到这些标签尚未包含在此处提到的一些在线参考资料中:stackoverflow.com/questions/539041/…
    • JSF 2.x 中发生了很多变化(2009 年下半年引入)。您提到的链接来自 2009 年 2 月,仅参考 JSF 1.x 文档。对于所有 JSF 2.x 标记,请查看 JSF 2.x 文档:download.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/… 当您使用 JSF 2.x 时,请确保您正在阅读针对 JSF 2.x 的教程/书籍/文档/答案。
    • 那么就没有机会引用不在资源文件夹中的css或js文件了吗?也无法从浏览器访问 js/css 资源,例如 myhost/resources/partials/my.css ?
    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2016-09-26
    • 2020-10-30
    • 1970-01-01
    • 2013-01-06
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多