首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过查看参数功能实现书签功能

通过查看参数功能实现书签功能
EN

Stack Overflow用户
提问于 2012-11-06 19:16:25
回答 1查看 3.4K关注 0票数 9

是否可以通过将includeViewParams=true查询参数与JSF隐式导航一起使用来实现书签功能?如果是,那是怎么做的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-06 20:12:39

首先,我们需要了解什么是“书签能力”,以及includeViewParams到底做了什么。这样可以更好地理解两者结合的效果。

Bookmarkability与HTTP请求URL的格式有关,正如您在浏览器的地址栏中看到的那样。这正是最终用户存储在书签中的URL和/或复制到其他地方的链接,例如论坛、chatbox、一些社交媒体,或者只是一个新的浏览器窗口/选项卡等。当一个链接被跟随或URL被复制到浏览器的地址栏时,默认情况下将触发HTTP GET请求。如果每次的结果都是完全相同的(不考虑授权/身份验证和页面-search结果、最新新闻等的时效性),那么我们可以讨论一个可加书签的URL。技术术语是“idempotent HTTP请求”。

但是,如果最终用户事先在该URL上提交了POST表单,而没有执行重定向,则该URL不一定是可加书签的。提交的表单数据不会反映在URL中。将URL复制到新的浏览器窗口/选项卡中不一定会产生与表单提交后完全相同的结果。这样的URL是不可加书签的。POST不是幂等的。这就是为什么page-to-page navigation by commandlinks is bad

书签能力通常是通过URL路径和/或查询参数的特定结构来实现的。如果你看一下谷歌,多亏了q查询字符串参数,搜索结果是可加书签的。

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

在JSF术语中,可以通过设置(以及转换和验证)这些请求参数

代码语言:javascript
复制
<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

使用

代码语言:javascript
复制
<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参数:

代码语言:javascript
复制
<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进入页面时,这将产生以下链接

代码语言:javascript
复制
/search.xhtml?q=bookmarkability
/search.xhtml?start=10&q=bookmarkability
/search.xhtml?start=20&q=bookmarkability

这些都是可加书签的URL,includeViewParams使创建它们变得更加方便。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13249844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档