请查看以下JSF代码行
<h:inputText id="name" value="#{customer.name}" />
引自java.sun.com:
对于包含此标记的页面的初始请求,JavaServer Faces实现在生命周期的呈现响应阶段评估
#{customer.name}
表达式。在此阶段,表达式仅访问customer bean中的name值,如立即评估中所做的那样。对于回发请求,JavaServer Faces实现在生命周期的不同阶段评估表达式,在此期间从请求中检索值,验证并传播到customer bean。
我不确定我是否理解初始请求与回发请求。客户端浏览器是否向Web服务器发出两个不同的请求?
答案 0 :(得分:26)
初始请求仅通过Restore View&amp;渲染响应阶段,同时在所有阶段进行回发请求过程(应用请求值,验证阶段等)。
通过点击链接,粘贴地址栏中的URL来创建初始请求,同时通过单击提交按钮或任何帖子请求发布表单来创建回发请求。
答案 1 :(得分:12)
初始请求是浏览器为显示带有${customer.name}
标记的页面而执行的请求。当浏览器发布部分或全部页面值,然后将首先发布的同一页面返回给客户端时,就会发生回发。例如,由于验证错误,可能会发生这种情况。
知道呈现的当前视图是否是回发的结果是有用的。例如,您可能希望在回发时显示消息,但不是每次刷新页面时都显示消息。
答案 2 :(得分:0)
通常,当您转到浏览器并在应用程序的URL中写入时,您只有一个初始请求。 这会使用您的Cookie向服务器发出HTTP GET请求,例如JSESSIONID,但没有要恢复的javax.faces.viewid。
如果你有一个打开的页面并且你做了hacky的东西舔:window.location = newUrl - &gt;你也会提出初步要求。
当您执行类似jQuery(“#somoeSubmitButton”)的操作时。单击(),您将POST到服务器并恢复旧视图 - 如果您询问faces context.isPostback()?你会成真的。