Как отключить параметры запроса 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>
Надеюсь, это полезно