Фильтр перезаписи (PrettyFaces) является одним из наиболее часто используемых фильтров.На самом деле, это так часто, что мы кратко рассказываем об этом здесь, в курсе веб-приложений в Chalmers, несколько лет назад.Чтобы использовать его, сначала вам нужно добавить следующие зависимости в ваш файл POM:
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-servlet</artifactId>
<version>3.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.ocpsoft.rewrite</groupId>
<artifactId>rewrite-config-prettyfaces</artifactId>
<version>3.4.2.Final</version>
</dependency>
PrettyFaces полностью использует аннотации времени выполнения JavaEE - поэтому он должен быть доступен для использования после добавления.Далее вы определяете конфигурацию - по умолчанию он будет искать файл pretty-config.xml
в вашем каталоге WEB-INF/
.Базовая установка может выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<pretty-config xmlns="http://ocpsoft.org/schema/rewrite-config-prettyfaces"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ocpsoft.org/schema/rewrite-config-prettyfaces
http://ocpsoft.org/xml/ns/prettyfaces/rewrite-config-prettyfaces.xsd">
<url-mapping id="home">
<pattern value="/" />
<view-id value="/index.xhtml" />
</url-mapping>
<url-mapping id="view-authors">
<pattern value="/authors" />
<view-id value="/author/list.xhtml" />
</url-mapping>
<url-mapping id="delete-author">
<pattern value="/authors/delete/#{id}"/>
<view-id value="/author/delete.xhtml?id=#{id}" />
</url-mapping>
<url-mapping id="edit-author">
<pattern value="/authors/edit/#{id}"/>
<view-id value="/author/edit.xhtml?id=#{id}" />
</url-mapping>
</pretty-config>
По сути, вы можете прочитать выше, как сделать view-id
доступным, как указано в pattern
.Чтобы прочитать значение идентификатора, вы указываете на своих страницах следующее (как обычно):
<f:metadata>
<f:viewParam name="id" value="#{bean.id}" />
</f:metadata>
Некоторое время назад PrettyFaces также поддерживает аннотации - позволяя пропустить `pretty-config.xml"подайте файл и укажите свой альтернативный шаблон URL поверх класса bean-компонента. Позволяет вам сделать что-то подобное прямо в вашем bean-компоненте;
@URLMapping(pattern = "/authors/edit/#{id}", viewId = "/author/edit.xhtml?id=#{id}")
Подробнее об этих аннотациях вы можете найти здесь; https://www.ocpsoft.org/prettyfaces/annotations-support-is-coming-to-prettyfaces-url-rewriting/
Хотя PrettyFaces позволяет вам контролировать полную структуру URL (включая параметры), если вам нужно только удалить расширение, вы можете использовать фильтр OmniFaces ExtensionlessURL (http://showcase.omnifaces.org/facesviews/ExtensionlessURLs) - которыйпросто управляется следующим образом:
<context-param>
<param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
<param-value>/*.xhtml</param-value>
</context-param>
Это сделает доступ к представлениям напрямую без расширения xhtml. Чтобы добавить OmniFaces в ваш проект, просто укажите в своем POM следующее:
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>3.2</version>
</dependency>
Я также хотел бы отметить, что на местах (среди реализаций) это не так уж и редко, что приложениеs разрабатывают свое собственное решение и осуществляют «предварительную сертификацию» самостоятельно - это особенно распространено, когда приложениям необходимо «сгенерировать» свой собственный URL на основе некоторого случайного идентификатора.Это может быть сделано путем реализации пользовательского фильтра, который вызывает forward()
в диспетчере запросов.Это, очевидно, позволяет вам пойти дальше и делать все, что вы хотите.Конечно, вы можете просто использовать PrettyFaces - но я думаю, что некоторые люди просто хотели бы сделать этот дополнительный шаг.
Извините за растянувшийся пост, но я не смог найти хорошее, подробное освещение этого насайт - так что я подумал, что я мог бы написать один.