Pretty URL скрывает ресурс с помощью PrettyFaces

У меня есть веб-приложение, работающее на PrettyFaces 3.3.3 и Wildfly 10.1.0.Final. Чтобы сделать URL-адреса более удобными для пользователя, я использовал PrettyFaces. Пример действительного URL-адреса будет похож на:

http://www.example.com/en/drinks

В этом случае внутри bean-компонента будет две переменные:

private String language;
private String zone;

Имея значения:

language = "en"
zone = "drinks"

Проблема в том, что у меня также есть файл CSS с путем:

http://www.example.com/styles/style.css

PrettyFaces неправильно интерпретирует это, не позволяя мне получить доступ к реальному ресурсу:

language = "styles"
zone = "style.css"

Я пытался найти способ сказать PrettyFaces не переводить URL-адрес файла CSS, но не смог найти ничего подобного.

Есть ли способ получить доступ к файлу CSS, сохранив красивый URL-адрес?

Моя текущая конфигурация PrettyFaces:

<url-mapping id="zoneSelected"> 
    <pattern value="/#{navigationController.language}/#{navigationController.zone}" /> 
    <view-id>/faces/index.xhtml</view-id>
</url-mapping>

person Socrates    schedule 08.03.2017    source источник


Ответы (1)


PrettyFaces сопоставит любой входящий запрос с регулярными выражениями.

Такой шаблон:

<pattern value="/#{bean.language}/#{bean.zone}" />

Будет преобразовано в регулярное выражение следующим образом:

/[^/]+/[^/]+

Это потому, что по умолчанию PrettyFaces использует [^/]+ для всех параметров пути.

Такой общий шаблон также будет соответствовать другим ресурсам, таким как файлы CSS или изображения.

Один из способов обойти эту проблему — настроить шаблон регулярного выражения, который PrettyFaces будет использовать для параметра пути. Это легко сделать и описано здесь:

http://www.ocpsoft.org/docs/prettyfaces/3.3.3/en-US/html/Configuration.html#config.pathparams.regex

Поэтому в основном просто используйте этот шаблон:

<pattern value="/#{ /[a-z]{2}/ bean.language }/#{bean.zone}" />

Это будет означать:

/[a-z]{2}/[^/]+

В этом случае ваша таблица стилей больше не будет соответствовать шаблону.

person chkal    schedule 08.03.2017