UnmappedResourceHandler не может преобразовать URL-адрес в CSS в действительный URL-адрес JSF

Вот моя установка:

  • Структура папок и имена файлов веб-приложения точно такие же, как у UnmappedResourceHandler javadoc
  • UnmappedResourceHandler уже зарегистрирован в faces-config.xml
  • /javax.faces.resource/* уже сопоставлен с FaceServlet в web.xml

style.css это:

body {
    background: url("image/background.png");
}

body .test{
    background-image: url("#{resource['css:image/background.png']}");
}

Затем я запрашиваю http://localhost:8080/app/javax.faces.resource/style.css?ln=css и получаю ответ:

body {
    background: url("image/background.png");
}

body .test{
    background-image: url("/app/javax.faces.resource/image/background.png?ln=css");
}

Я ожидаю, что все относительные URL-адреса в CSS будут преобразованы в допустимый URL-адрес JSF, как это делает #{resource}, так что мне больше не нужно использовать #{resource} для ссылки на относительные URL-адреса в CSS, но относительный URL-адрес background для селектор body остается неизменным.


Обновление ответа BalusC:

  1. Если используется библиотека ресурсов, добавление ?ln=libraryname ко всем изображениям CSS будет работать!

  2. Но если библиотека ресурсов не используется, <h:outputStylesheet name="css/style.css" /> генерирует <link rel="stylesheet" media="screen" type="text/css" href="/app/javax.faces.resource/css/style.css.xhtml">

    Если я правильно понимаю из this, используя UnmappedResourceHandler и сопоставление /javax.faces.resource/* с facesServlet в web.xml должно потому что JSF генерирует ссылку style.css без расширения xhtml.


person Ken Chan    schedule 31.05.2013    source источник


Ответы (1)


Вы используете css в качестве библиотеки ресурсов, например:

<h:outputStylesheet library="css" name="style.css" />

Это неправильно. Это просто папка:

<h:outputStylesheet name="css/style.css" />

Это создаст URL-адрес /javax.faces.resource/css/style.css вместо /javax.faces.resource/style.css?ln=css. В противном случае вы также можете указать его в URL-адресе изображения:

background: url("image/background.png?ln=css");

Я обновлю javadoc, чтобы уточнить это.

Смотрите также:

person BalusC    schedule 31.05.2013
comment
Спасибо BalusC! Я попробовал ваши предложения и до сих пор не могу заставить его работать. Пожалуйста, смотрите мое обновление в вопросе. Большое спасибо. - person Ken Chan; 31.05.2013
comment
Вы отменили регистрацию UnmappedResourceHandler? <h:outputStylesheet name="css/style.css" /> не должен создавать URL с расширением .xhtml. У вас случайно нет другого ResourceHandler в вашем веб-приложении, которое, возможно, имеет приоритет над UnmappedResourceHandler? library не нужен и только добавляет путаницы и проблем с обслуживанием (вы должны указать ?ln=libraryname во всех изображениях CSS). Просто избавься от этого. - person BalusC; 31.05.2013
comment
Я попробовал еще раз, если используется библиотека ресурсов, добавление ?ln=libraryname ко всем изображениям CSS будет работать! Итак, текущая проблема заключается в том, что если библиотека ресурсов не используется, <h:outputStylesheet > создает URL с расширением .xhtml. UnmappedResourceHandler уже зарегистрирован, и нет других ResourceHandler, отменяющих его, поскольку я специально создаю это веб-приложение с нуля, чтобы попробовать UnmappedResourceHandler. - person Ken Chan; 31.05.2013
comment
Кстати, в соответствии с исходным запросом функции (code.google.com/p /omnifaces/issues/detail?id=119) , я изначально думал, что цель UnmappedResourceHandler состоит в том, чтобы разрешить определение URL-адреса в CSS обычным способом и не требует каких-либо изменений для соответствия системе ресурсов JSF. . Итак, кажется, я неправильно понял это раньше, поскольку URL-адрес в css все еще нужно изменить, добавив ?ln=libraryname, когда используется библиотека ресурсов. - person Ken Chan; 31.05.2013
comment
Библиотеки ресурсов JSF не являются частью стандартного HTML/CSS, поэтому просто опустите их. Дело в том, что вам не нужно редактировать эти сторонние файлы CSS (Bootstrap, jQuery UI и т. д.). Я не могу воспроизвести вашу проблему с добавлением .xhtml при ссылке на CSS без библиотеки ресурсов. Какую реализацию/версию JSF вы используете? - person BalusC; 31.05.2013
comment
да. Это как раз и есть цель UnmappedResourceHandler, о которой я думал раньше: разрешить использование сторонних файлов CSS (Bootstrap, jQuery UI и т. д.) напрямую с <h:outputStylesheet > без каких-либо изменений, независимо от того, используются библиотеки ресурсов или нет. Я использую myFaces 2.1.1. Возможно, я попробую использовать mojarra, чтобы увидеть, есть ли какие-либо различия. - person Ken Chan; 31.05.2013
comment
Не удается воспроизвести в MyFaces 2.1.11 (текущая последняя версия). Позже попробую 2.1.1, сейчас под рукой нет. - person BalusC; 31.05.2013
comment
Ой . У меня была опечатка раньше. Извините за это. Я использую MyFaces 2.1.11. Но я просто пробую mojarra 2.1.22 , и это работает. Так смешно. - person Ken Chan; 31.05.2013
comment
Вы перезапускали сервер после внесения изменений в файл Facelets? Когда MyFaces не настроен на стадию разработки, он очень агрессивно кэширует файлы Facelets. - person BalusC; 31.05.2013
comment
Да . Я уже перешел к стадии разработки и перезапустил сервер. Я помещаю свой тестовый проект в это. Буду признателен, если вы сможете протестировать его, когда захотите. бесплатно. - person Ken Chan; 01.06.2013