5

我正在使用以下内容在我们的应用程序中获取帮助文档。我的问题是,虽然<h:graphicImage>正确评估上下文路径,但h:outputLink评估它什么都没有。我已经尝试使用两者$#因为h:outputLink我知道它们有不同的评估时间。

两个 EL 表达式的求值方式有何不同?

<h:outputLink value="${pageContext.servletContext.contextPath}/services/help.pdf">
    <h:graphicImage 
        url="${pageContext.servletContext.contextPath}/images/help.png" 
        alt="Online Help"/>
</h:outputLink>
4

2 回答 2

15

上下文路径没有出现<h:outputLink>表明您实际上是在使用 Facelets 而不是 JSP。Facelets中${pageContext}根本不存在。它特定于旧版 JSP。这两个表达式都刚刚评估为一个空字符串。因此,它们之间根本没有区别。

上下文路径出现在其中<h:graphicImage>是完全可以预料的。这是由组件本身自动包含的。事实上,整个表达式是多余的,下面的应该也可以。

<h:graphicImage url="/images/help.png" alt="Online Help"/>

<h:outputLink>确实不会自动包含上下文路径。只有这样<h:link>做。您需要自己包含它。在 Facelets 中,您可以使用#{request}来获取一个句柄,HttpServletRequest而该句柄也有一个getContextPath()(并且<h:graphicImage>在幕后使用)。

<h:outputLink value="#{request.contextPath}/services/help.pdf">
于 2011-04-13T20:45:59.903 回答
3

试试这个 #{facesContext.externalContext.requestContextPath} 我希望这可以帮助你也检查这个链接链接文本

问候, 塞尔吉奥·瓦尔迪兹

于 2010-12-22T19:46:27.880 回答