java.lang.NullPointerException: Argument Error: Parameter value is null
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.writeURIAttribute(HtmlResponseWriter.java:985)
at com.sun.faces.renderkit.html_basic.StylesheetRenderer.encodeEnd(StylesheetRenderer.java:108)
Давайте посмотрим на источник StylesheetRenderer#encodeEnd()
(я использую Mojarra 2.1.4; я предполагаю, что вы также используете его, поскольку большинство, если не все com.sun.faces
номера строк в трассировке стека соответствуют 100%с источником, однако в будущем, пожалуйста, укажите точную версию):
105 String resourceUrl = "RES_NOT_FOUND";
105 if (resource != null) {
106 resourceUrl = context.getExternalContext().encodeResourceURL(resource.getRequestPath());
107 }
108 writer.writeURIAttribute("href", resourceUrl, "href");
Итак, resourceUrl
- это null
как-то.
Давайте посмотрим на ExternalContext#encodeResourceURL(String)
источник:
311 public abstract String encodeResourceURL(String url);
Да, это абстракция.Что ж, давайте посмотрим на реализацию Mojarra по умолчанию, com.sun.faces.context.ExternalContextImpl
:
521 public String encodeResourceURL(String url) {
522 return ((HttpServletResponse) response).encodeURL(url);
523 }
Ах, он делегирует HttpServletResponse#encodeURL()
, который по умолчанию вообще не должен возвращать null
.
Итак, ваша проблема может иметь как минимум 2 возможные причины:
- У вас есть пользовательская реализация
ExternalContext
, которая не выполняет свою работу в encodeResourceURL()
должным образом. - У вас есть пользовательская реализация
HttpServletResponseWrapper
, которая не выполняет свою работу в encodeURL()
должным образом.
Установка точки останова отладчика в строке 106 из StylesheetRenderer
и отладка оттуда должны сообщить вамкакие реализации на самом деле использовались.
То же исключение возникает при удалении <h:outputStylesheet>
, вероятно, потому что RichFaces неявно вставляет туда эти компоненты, а также для собственных таблиц стилей.Основываясь на ваших декларациях пространства имен XML, вы используете RichFaces.