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

Ada*_*dam 5 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>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 15

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

<h:graphicImage>完全预期上下文路径出现.这是组件本身自动包含的.事实上,整个表达是多余的,以下应该是好的.

<h:graphicImage url="/images/help.png" alt="Online Help"/>
Run Code Online (Sandbox Code Playgroud)

<h:outputLink>的确不会自动包括上下文路径.只有这样<h:link>做.你需要自己包括它.在Facelets中,您可以使用#{request}获得一个手柄,HttpServletRequest而手柄也具有一个getContextPath()(并且<h:graphicImage>在封面下使用).

<h:outputLink value="#{request.contextPath}/services/help.pdf">
Run Code Online (Sandbox Code Playgroud)