Функция закладок с помощью функции "Просмотр параметров"

Возможно ли выполнение закладок, используя параметр запроса includeViewParams=true с помощью скрытой навигации JSF? Если да, то как?

Ответ 1

Сначала нам нужно понять, что такое "bookmarkability" и что именно делает includeViewParams. Таким образом, эффект комбинации обоих может быть лучше понят.

Bookmarkability относится к URL-адресу HTTP-запроса в его точной форме, как вы видите в адресной строке браузера. Это точно URL-адрес, который конечный пользователь будет хранить в своих записях и/или будет копировать в качестве ссылки в другом месте, например форум, чат-бокс, какой-либо социальный носитель или просто новое окно браузера/вкладку и т.д. Когда происходит ссылка или URL-адрес копируется в адресную строку браузера, тогда по умолчанию будет запущен запрос HTTP GET. Если результат точно одинаковый каждый раз (оставляя авторизацию/аутентификацию и чувствительный ко времени характер страницы, результаты поиска, последние новости и т.д.), Мы можем поговорить об закладке URL. Техническим термином является idempotent HTTP-запрос".

Если конечный пользователь, однако, заранее отправил форму POST на этот URL-адрес, который не выполнил перенаправление, то URL-адрес необязательно может быть заклассифицирован. Представленные данные формы не отображаются в URL-адресе. Копирование URL-адреса в новое окно браузера/вкладку необязательно может дать точно такой же результат, как после отправки формы. Такой URL-адрес не может быть заклассифицирован. POST не является идемпотентным. Вот почему навигация по страницам с помощью командной строки плохо.

Закладочность обычно достигается с помощью конкретной конструкции URL-адреса и/или параметров запроса. Если вы посмотрите на Google, результаты поиска будут заклассифицированы благодаря параметру строки запроса q.

http://google.com/search?q=bookmarkability

В терминах JSF эти параметры запроса могут быть установлены (и преобразованы и проверены) через <f:viewParam>:

<f:metadata>
    <f:viewParam name="q" value="#{bean.query}" />
    <f:viewAction action="#{bean.search}" />
</f:metadata>

Если вам нужно выполнить, например, разбивку на страницы, и вы хотите сохранить URL-адрес закладки, тогда вы можете добавить еще один параметр запроса:

http://google.com/search?q=bookmarkability&start=10

с

<f:metadata>
    <f:viewParam name="q" value="#{bean.query}" />
    <f:viewParam name="start" value="#{bean.start}" />
    <f:viewAction action="#{bean.search}" />
</f:metadata>

includeViewParams="true" в основном включает в себя все эти параметры просмотра в сгенерированной ссылке GET. С помощью этого ссылки с разбивкой по страницам могут выглядеть так, без необходимости повторять параметр q:

<h:link value="1" outcome="search" includeViewParams="true">
    <f:param name="start" value="#{null}" />
</h:link>
<h:link value="2" outcome="search" includeViewParams="true">
    <f:param name="start" value="10" />
</h:link>
<h:link value="3" outcome="search" includeViewParams="true">
    <f:param name="start" value="20" />
</h:link>
...

(естественно, генерируется некоторым <ui:repeat> или так)

При вводе страницы с q=bookmarkability это приведет к следующим ссылкам

/search.xhtml?q=bookmarkability
/search.xhtml?start=10&q=bookmarkability
/search.xhtml?start=20&q=bookmarkability

Это URL-адреса, доступные для закладки, и includeViewParams сделали их более удобными.