Как предварительно оптимизировать маршруты в Java EE? - PullRequest
0 голосов
/ 25 февраля 2019

Перед плохой документацией и руководствами в Интернете о том, как выровнять маршруты в Java EE / Jakarta EE (версия 7 или 8).Я хочу спросить вас, есть ли у вас какие-либо рекомендации.

В настоящее время я использую OCPsoft Rewrite , но их документация, руководства и сообщество выглядят очень легкими или тихими.

Что вы делаете для преобразования базовых маршрутов XHTML JSF в представления типа views/mypage.xhtml в красивый URL-адрес, например /path/to/mypage?

Или, может быть, многие люди в Java EE / Jakarta EE не заботятся опредвосхищая маршруты?

1 Ответ

0 голосов
/ 26 февраля 2019

Фильтр перезаписи (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 - но я думаю, что некоторые люди просто хотели бы сделать этот дополнительный шаг.

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

...