Перезапись URL-адресов JSF

#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)