【问题标题】:Request handling inside the FacesContextFacesContext 内的请求处理
【发布时间】:2011-01-28 04:29:14
【问题描述】:

嗨,

这个问题来自BalusC之前的answered问题。答案摘录如下:

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

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

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

  • 是否为新的请求保留了上一个请求中的值?

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

  • 当我们在faces-config.xml中使用<redirect/>时,地址栏的URL会不会改变?

【问题讨论】:

    标签: java jsp jsf


    【解决方案1】:

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

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

    是否为新请求保留了上一个请求中的值?

    在转发中没有新请求的方式。这是相同的请求。

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

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

    当我们在faces-config.xml中使用<redirect/>时,地址栏中的URL会不会改变?

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

    【讨论】:

    • 还有一个问题,因为它是在同一个请求上转发的。我们在请求范围内输入的值也可用于下一页。我对么?。在我们的应用程序中,我们从不使用重定向选项。在这种情况下,所有视图都使用相同的请求转发显示。请消除我的疑虑。
    • 不,它只在同一个请求中可用。结果页面显示为对同一请求的响应。
    • Krishna,您可能会发现 this answer 对了解在 JSF 的掩护下运行的 Servlet API 中发生的事情也很有用。
    【解决方案2】:

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

    如果网页浏览器中的 url 相同,则可能有两种情况。正如他提到的那样转发相同的请求,或者使用相同的 URL 发出新的 GET 请求[情况较少]

    是否为新请求保留了上一个请求中的值?

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

    当我们使用faces-config.xml中的时候,地址栏的URL会不会改变?

    是的,它会指示浏览器对新 URL 发出新的 GET 请求。

    【讨论】:

    • 请阅读 BaluC 的回答,他的回答和你的有点不同。
    猜你喜欢
    • 2017-02-24
    • 1970-01-01
    • 2021-08-08
    • 2010-09-06
    • 2011-02-23
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多