То, что контекстный путь не появляется в <h:outputLink>
, предполагает, что вы на самом деле используете Facelets вместо JSP.${pageContext}
вообще не существует в Facelets.Это специфично для устаревшей 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">