默认情况下,JSF将在导航到另一个页面时向前执行服务器页面。 请参见以下示例,以区分页面转发和页面重定向。
“ start.xhtml
”页面,带有一个按钮,导航到“ page1.xhtml
”页面。
1.上一页
以下是前进页面的工作方式:
- 浏览器将“ GET ”请求发送到URL:http:// localhost:8080 / JavaServerFaces / faces / start.xhtml。
- JSF收到了请求并返回“ start.xhtml ”。
- 浏览器显示“ start.xhtml ”的内容。
- 用户单击按钮。
- JSF收到了该动作,并在服务器端执行了一个内部页面,转发到“ page1.xhtml ”。
- JSF返回“ page1.xhtml ”。
- 浏览器显示“ page1.xhtml ”的内容。
在向前的页面中, 浏览器的URL不是update 。
2.页面重定向
这是页面重定向的工作方式:
- 浏览器将“ GET ”请求发送到URL:http:// localhost:8080 / JavaServerFaces / faces / start.xhtml。
- JSF收到了请求并返回“ start.xhtml ”。
- 浏览器显示“ start.xhtml ”的内容。
- 用户单击按钮。
- JSF收到了该动作,并将对“ page1.xhtml ”的“ 重定向 ”发送回浏览器。
- 浏览器收到响应,并向URL发送另一个“ GET ”请求:http:// localhost:8080 / JavaServerFaces / faces / page1.xhtml。
- JSF收到了请求并返回“ page1.xhtml ”。
- 浏览器显示“ page1.xhtml ”的内容,并且浏览器的URL已更新 。
要在JSF 2.0中启用页面重定向,可以在结果字符串的末尾附加“ faces-redirect=true
”。
向前翻页。
<h:form>
<h:commandButton action="page1" value="Page1" />
</h:form>
页面重定向。
<h:form>
<h:commandButton action="page1?faces-redirect=true" value="Page1" />
</h:form>
在导航规则中,可以通过在<navigation-case />
添加<redirect />
元素来启用页面重定向。
<navigation-rule>
<from-view-id>start.xhtml</from-view-id>
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>page1.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
结论
与页面重定向相比,默认页面转发机制要更快,因为页面重定向向服务器添加了额外的HTTP请求。 因此,仅在必要时启用页面重定向,例如,使用Post / Redirect / Get Design Pattern解决经典的重复表单提交问题 。
下载源代码
下载它– JSF-2-Page-Redirection-Example.zip (9KB)
标签: jsf2
翻译自: https://mkyong.com/jsf2/jsf-page-forward-vs-page-redirect/