输出链接和graphicImage之间的EL上下文路径评估差异

时间:2010-11-10 20:04:18

标签: jsf el contextpath

我正在使用以下内容在我们的应用中获取帮助文档。我的问题是,当<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>

2 个答案:

答案 0 :(得分: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()也可以{{3}}(<h:graphicImage>使用的句柄)。< / p>

<h:outputLink value="#{request.contextPath}/services/help.pdf">

答案 1 :(得分:3)

试试这个#{facesContext.externalContext.requestContextPath}我希望这可以帮助您查看此链接link text

此致 塞尔吉奥瓦尔德兹