在FacesContext中请求处理

时间:2011-01-28 04:29:14

标签: java jsp jsf

HI,

此问题来自answered以前的BalusC问题。答案的摘录如下:

  

只有在封面下才会发生这种情况   前进的   RequestDispatcher#forward()需要   地点。在前进中,   servletcontainer基本上重用了   视图的相同HTTP请求/响应   (JSP / XHTML页面)。它不是   强制/指示webbrowser发送   一个全新的要求。

这意味着每个新视图都是使用前向渲染的。以下是我的问题:

  • 如果是上面的情况,那么所有的视图都显示有相同的请求?因为,我们总是在地址栏中看到相同的网址。

  • 是否为新请求保留了先前请求中的值?

  • 在这种情况下,如果每个请求都相同,那么就像在会话中存储很长时间一样。我对JSF的视图处理感到有点困惑。想要了解更多JSF的内部工作流程。

  • 当我们使用<redirect/>中的faces-config.xml时,地址栏中的网址会被更改吗?

2 个答案:

答案 0 :(得分:1)

  

如果是上面的情况,那么所有的视图都显示有相同的请求?因为,我们总是在地址栏中看到相同的网址。

如果网络浏览器中的网址相同,则可能有两种情况。要么正如他提到的那样转发相同的请求,要么使用相同的URL发布新的GET请求[这种情况比较少]

  

是否为新请求保留了先前请求中的值?

请求生命周期将从请求到响应。所以在响应之后,所有带有请求范围的托管bean都将被销毁。

  

当我们使用in faces-config.xml时,地址栏中的URL会被更改吗?

是的,它会指示浏览器为新网址发出新的GET请求。

答案 1 :(得分:1)

  

如果是上面的情况,那么所有的视图都显示有相同的请求?因为,我们总是在地址栏中看到相同的网址。

如果它涉及HTTP POST请求并且JSF bean操作导航到不同的视图,那么在同一个请求中,您确实会有两个不同的视图。一个用于初始视图,用于收集/转换/验证必要的请求参数并更新模型值,另一个用于结果视图,用于显示某些结果。

  

是否为新请求保留了先前请求中的值?

在前锋中,没有新请求的手段。这是相同的请求。

  

在这种情况下,如果每个请求都相同,那么就像在会话中存储很长时间一样。我对JSF的视图处理感到有点困惑。想了解更多JSF的内部工作流程。

绝对不是这样。至于你的困惑,将JSF搁置一段时间并使用简单的vanilla JSP / Servlet(这是JSF正在使用的内容)可能会有所帮助。我认为以下链接可能有助于获得有关基本JSP / Servlet如何工作以及JSP / Servlet上的平均MVC框架如何工作的新见解:

  

当我们使用<redirect/>中的faces-config.xml时,地址栏中的网址会更改吗?

是。 HTTP重定向会发送HTTP location: newpage.jsf标头,该标头又会指示Web浏览器在给定位置触发新的HTTP GET请求。这反映在浏览器地址栏中。您可能需要安装HTTP调试工具,如FirebugFiddler2来跟踪HTTP流量。您将看到在同一请求中发生了转发,并且重定向带有新请求。