Закладка через функцию просмотра параметров

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

1 ответ

Решение

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

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

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

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

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