Красивые URL-адреса для ресурсов JSF (CSS, JS, изображения) с использованием PrettyFaces

У меня есть веб-приложение, работающее на Glassfish 3.1.2.2, которое использует JSF 2.1 (Mojarra) и PrettyFaces 3.3.3 для облегчения задачи интеграции «симпатичных» URL-адресов в стиле REST с моим приложением.

Однако, глядя на сгенерированный html-код, я вижу довольно «уродливые» длинные пути к ресурсам моего приложения. Нравится:

<script type="text/javascript" src="/HelloWorld/faces/javax.faces.resource/js/jquery-1.9.1.min.js">

В частности, часть faces/javax.faces.resource/ режет глаз. Следуя основной идее PrettyFaces, я бы хотел убрать эту часть.

Можно ли перехватить генерацию этих URL и может ли PrettyFaces помочь мне в этом?

Я использую <h:outputScript name="js/jquery-1.9.1.min.js" />, <h:outputStylesheet name="css/app.css" /> и <h:graphicImage name="img/logo.png" /> для включения ссылок на ресурсы в свой JSF-Servlet.

редактировать: я должен сделать две вещи?

  • Первый: сопоставьте такие запросы, как /img/*, с их фактическим местоположением /faces/javax.faces.resource/img/*.
  • Второе: подключиться к генерации URL элемента <h:graphicImage /> (и других).

Я был бы рад, если бы вы могли дать мне несколько советов о том, с чего начать. Я новичок в JSF.

Большое спасибо! :)


person RamboNo5    schedule 23.03.2013    source источник
comment
Какова мотивация этого требования?   -  person Luiggi Mendoza    schedule 23.03.2013
comment
Я знаю, что ты имеешь в виду @Luiggi. Это скорее мягкое требование. Я хотел бы, чтобы мои URL-адреса были красивыми, даже те, которые указывают на ресурсы. Я думаю, что этот /HelloWorld/img/logo.png или /HelloWorld/resources/img/logo.png выглядит лучше, чем /HelloWorld/faces/javax.faces.resource/img/logo.png.   -  person RamboNo5    schedule 23.03.2013
comment
Вы можете найти это полезным: добавляется к ресурсам при загрузке страницы"> stackoverflow.com/questions/14963756/   -  person BalusC    schedule 23.03.2013
comment
Спасибо, эта тема и другие, связанные оттуда, были очень информативными. Кажется, это нетривиальная задача ;) Я посмотрю Rewrite, как предложил @chkal.   -  person RamboNo5    schedule 24.03.2013
comment
Сокрытие javax.faces.resource также является проблемой безопасности.   -  person djmj    schedule 16.08.2013


Ответы (1)


К сожалению, реализовать такое требование с помощью PrettyFaces очень сложно. Это одна из причин, по которой мы решили запустить Rewrite, который является преемником PrettyFaces.

С Rewrite очень легко сделать что-то подобное. Вам просто нужно добавить правило соединения, которое преобразует путь, который вы хотели бы видеть, в путь, который в настоящее время использует ваше приложение.

Ваше требование может быть реализовано примерно так:

.addRule(Join.path("/js/{file}").to("/faces/javax.faces.resource/js/{file}"))

Легко, не так ли? Если вы хотите узнать больше о Rewrite, просмотрите примеры конфигураций. Если у вас возникли проблемы, загляните на форумы.

Rewrite 2.0.0.Final, который выйдет совсем скоро, содержит несколько приятных улучшений. Особенно модуль обратной совместимости для PrettyFaces, который позволяет повторно использовать текущую конфигурацию PrettyFaces, если вы хотите заменить PrettyFaces на Rewrite.

person chkal    schedule 24.03.2013
comment
Спасибо, я посмотрю более подробно на Rewrite. Это выглядит интересно! - person RamboNo5; 24.03.2013