Gee*_*eek 8 jsf bookmarks jsf-2
是否可以通过includeViewParams=trueJSF隐式导航使用查询参数来实现书签?如果是,那怎么样?
Bal*_*usC 17
首先,我们需要了解究竟什么是"书签",究竟是什么includeViewParams.这样可以更好地理解两者组合的效果.
书签性与您在浏览器地址栏中看到的确切形式的HTTP请求URL有关.这正是URL作为终端用户将存储在它的书签和/或在别的地方copypaste为纽带,比如一个论坛,一个客舱,一些社会媒体,或者只是一个新的浏览器窗口/标签等.当一个链接后面或URL被copypasted到浏览器的地址栏中,则默认情况下HTTP GET请求将被解雇.如果结果是完全相同一样,每次(留下授权/认证和页面-搜索结果的时效性,最后的消息,etc-外考虑),那么我们可以谈论一个书签的网址.技术术语是" 幂等 HTTP请求".
但是,如果最终用户事先在该URL上提交了一个POST表单,但尚未执行重定向,则该URL不一定是可收藏的.提交的表单数据不会反映在URL中.将URL复制到新的浏览器窗口/选项卡可能不一定会产生与表单提交后完全相同的结果.这样的URL不是可收藏的.POST不是幂等的.这就是为什么命令链接的页面到页面导航是坏的.
可写性通常通过URL路径和/或查询参数的特定构造来实现.如果您查看Google,由于q查询字符串参数,搜索结果可以收藏.
在JSF术语中,可以通过以下方式设置(并转换和验证)这些请求参数<f:viewParam>:
<f:metadata>
<f:viewParam name="q" value="#{bean.query}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
如果你需要执行例如分页,并且你想保持URL可书签,那么你可以添加另一个请求参数:
同
<f:metadata>
<f:viewParam name="q" value="#{bean.query}" />
<f:viewParam name="start" value="#{bean.start}" />
<f:viewAction action="#{bean.search}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
的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>
...
Run Code Online (Sandbox Code Playgroud)
(当然是由一些<ui:repeat>左右产生的)
当进入页面时q=bookmarkability,这将产生以下链接
/search.xhtml?q=bookmarkability
/search.xhtml?start=10&q=bookmarkability
/search.xhtml?start=20&q=bookmarkability
Run Code Online (Sandbox Code Playgroud)
这些是可收藏的URL,includeViewParams并使创建它们更方便.
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |