Как отключить параметры запроса jftfdi jffi в JSF

Я попробовал последнюю версию JavaServer Faces 2.2 (Mojarra 2.2.4) и заметил изменение строки запроса таким нежелательным образом:

page.jsf?jftfdi=&jffi=

вместо

page.jsf

Я обнаружил, что это новая функция JSF 2.2. Но эти параметры запроса (jftfdi, jffi) портят мне SEO-ориентированные URL. Как я могу отключить это?

2 ответа

Решение

Это ошибка в Мохарре. Они не должны были быть добавлены, когда нет средств для какой-либо конфигурации навигации потока ( по новой @FlowScoped аннотация и <j:flow-xxx> теги).

В основном, OutcomeTargetRenderer класс, который отвечает за генерацию выходного HTML <h:link> а также <h:button> неправильно проверяет, NavigationCase#getToFlowDocumentId() возвращает не null перед добавлением параметров навигации потока. Тем не менее, на основе javadoc базовая реализация никогда не возвращается null, но пустая строка. Поэтому средство рендеринга всегда думает, что оно находится в середине потока навигации и всегда добавляет связанный jftfdi а также jffi параметры запроса. Исправление состоит в том, чтобы позволить ему также проверить, возвращает ли он непустую строку.

Я сообщил об этом как о проблеме 3054, и они подтвердили, что это ошибка, и в настоящее время работают над ней. Исправление, скорее всего, будет доступно в Моджарре 2.2.5.

Обновление: на данный момент, менее чем через день, это исправлено для 2.2.5.


Кстати, jftfdi обозначает " javax.faces Передать идентификатор документа ", который указан следующим образом в javadoc:

Компоненты, которые отображаются средствами рендеринга семейства компонентов javax.faces.OutcomeTarget должна использовать эту константу в качестве имени параметра для параметра, представляющего определяющий идентификатор документа потока, который будет вызывать этот компонент.

и jffi обозначает " javax.faces "Идентификатор потока", который указан в javadoc следующим образом:

Компоненты, которые отображаются средствами рендеринга семейства компонентов javax.faces.OutcomeTarget должна использовать эту константу в качестве имени параметра для параметра, представляющего идентификатор потока, который будет вызывать этот компонент.

У меня была такая же ошибка раньше. Происхождение этой ошибки - версия jsf. Просто попробуйте обновить версию до 2.2.5 следующим образом:

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.5</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.5</version>
    </dependency> 

Надеюсь, это полезно

Другие вопросы по тегам