我正在使用以下内容在我们的应用中获取帮助文档。我的问题是,当<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>
答案 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
此致 塞尔吉奥瓦尔德兹