Закладка через функцию просмотра параметров
Можно ли сделать закладку доступной, используя includeViewParams=true
параметр запроса с неявной навигацией JSF? Если да, то как?
1 ответ
Для начала нам нужно понять, что такое "закладка" и что именно includeViewParams
делает. Таким образом, эффект комбинации обоих можно лучше понять.
Закладка относится к URL-адресу HTTP-запроса в точном виде, как вы видите в адресной строке браузера. Это именно тот URL-адрес, который конечный пользователь будет хранить в своих закладках и / или скопировать в виде ссылки в другом месте, например на форуме, в чате, на каком-либо социальном носителе или просто в новом окне / вкладке браузера и т. Д. При переходе по ссылке или URL-адрес копируется в адресную строку браузера, тогда по умолчанию будет запущен HTTP-запрос GET. Если результат всегда остается одним и тем же (оставляя за рамками авторизацию / аутентификацию и чувствительный ко времени характер страницы - результаты поиска, последние новости и т. Д.), Тогда мы можем говорить о закладочном URL. Технический термин - идемпотентный HTTP-запрос.
Однако если конечный пользователь заранее отправил форму POST по этому URL-адресу, которая не выполняла перенаправление, то этот URL-адрес не обязательно должен быть добавлен в закладки. Данные отправленной формы не отражаются в URL. Копирование URL-адреса в новое окно / вкладку браузера не обязательно приведет к тому же результату, что и после отправки формы. Такой URL не может быть добавлен в закладки. ПОСТ не идемпотент. Вот почему постраничная навигация по командным ссылкам плохая.
Закладка обычно достигается с помощью определенной конструкции URL-пути и / или параметров запроса. Если вы посмотрите на Google, результаты поиска станут закладками благодаря q
параметр строки запроса.
В терминах JSF эти параметры запроса могут быть установлены (и преобразованы и проверены) с помощью <f:viewParam>
:
<f:metadata>
<f:viewParam name="q" value="#{bean.query}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
Если вам нужно выполнить, например, разбиение на страницы, и вы хотите, чтобы URL-адрес был добавлен в закладки, то вы можете добавить еще один параметр запроса:
с
<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
сделал их создание более удобным.