Разница в оценке пути к контексту EL между outputLink и graphicImage - PullRequest
5 голосов
/ 10 ноября 2010

Я использую следующее, чтобы получить справочный документ в нашем приложении.Моя проблема в том, что, хотя <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 ]

15 голосов
/ 14 апреля 2011

То, что контекстный путь не появляется в <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">
3 голосов
/ 22 декабря 2010

Попробуйте это # ​​{FaceContext.externalContext.requestContextPath} Я надеюсь, что это может помочь вам также проверить эту ссылку текст ссылки

С уважением, Серхио Вальдес

...