#jsf #url-rewriting
#jsf #перезапись URL-адресов
Вопрос:
Я пытаюсь использовать ‘rewrite’ (http://ocpsoft.org/rewrite / ) в моем приложении JSF.
Все в порядке, я создал правило:
.addRule(Join.path("/profile/{pagename}-{id}/").to("/profile/{pagename}.xhtml?id={id}"))
Все работает нормально, например, когда я захожу в /profile / viewpoll-101/, я вижу правильную страницу с опросом с идентификатором = 101. Итак, теперь я хочу получить удобные для пользователя ссылки в элементах h: link jsf. Я пытаюсь это:
<h:link outcome="/profile/viewpoll-#{poll.id}/">
#{poll.title}
</h:link>
Но ссылка не активна…
Итак, как я могу получить удобные для пользователя ссылки в h: link?
Спасибо!
Ответ №1:
Невозможно сделать это с помощью rewrite, только с помощью Prettyfaces. С помощью rewrite вы должны указать идентификатор JSF.
PrettyFaces поставляется со специальным компонентом JSF, который упрощает создание ссылок на сопоставленные URL-адреса. Однако в JSF 2.0 появился h:link, который отлично работает для создания таких ссылок. Перезапись не включает в себя какой-либо специальный компонент JSF. Рекомендуется использовать стандартный компонент JSF для отображения ссылок.
Использовать h:link для создания ссылок для перезаписи URL-адресов очень просто. Просто используйте URL-адрес, который вы настроили как часть соединения для получения результата. Если URL-адрес содержит параметры, задайте их значение с помощью f:param.
<h:link outcome="/customer-details.jsf">
<f:param name="id" value="123"/>
Show details
</h:link>
В JSF 2 с неявной навигацией вы могли бы использовать это для доступа к /customer-details.jsp или /customer-details.xhtml:
<h:link outcome="/customer-details">
<f:param name="id" value="123"/>
Show details
</h:link>
Смотрите также:
Комментарии:
1. Но я не сопоставляю этот URL-адрес с помощью PrettyFaces. Я сопоставляю эти URL-адреса с помощью перезаписи ( ocpsoft.org/rewrite/examples )
2. Я только что заметил это;-) Обновил мой ответ в соответствии с документами.
3. Если имя ресурса должно быть «customer-details-123», то customer-details.xhtml?id= 123 на самом деле не является удовлетворительным. Вы используете знание страницы, на которую переписывается правило, что может работать, но не является приятным. Я думаю, что это ошибка в Rewrite / PrettyFaces. Он должен подтвердить имя ресурса, используемое в результате (для этого JSF вызывает различные подключаемые модули, одним из которых должен быть PrettyFaces)