【问题标题】:Grails - Redirecting a RequestGrails - 重定向请求
【发布时间】:2014-10-21 08:15:36
【问题描述】:

如果我在同一个类中获得与以下代码中的重定向操作相同的结果,我不能只调用没有重定向操作的函数“second”吗?

  class SampleController {
      def first() {
        // redirect to the "second" action...
        redirect action: "second"
      }
      def second() {
        // ...
    } }

【问题讨论】:

    标签: grails redirect grails-controller


    【解决方案1】:

    如果我不执行重定向操作,我不能只调用 then 函数“second”吗 在同一个班级中获得与重定向相同的结果 以下代码中的操作?

    当然,您可以从控制器操作中调用方法,但是否获得相同的结果取决于许多因素。解决此问题的最佳方法是了解重定向、转发和调用方法之间的区别。了解这些将帮助您了解它们何时有意义。

    当您启动重定向时,响应将发送回客户端,其中包含导致客户端将单独的请求发送回您的应用程序的信息。进行了完整的 HTTP 往返。转发类似于重定向,只是它都发生在第一个请求中。控制被发送到转发的操作,而不需要返回给客户端并让它发送第二个请求。调用方法不同于所有这些。调用一个方法只是调用一个方法,当你这样做时,有很多事情不会发生。例如,过滤器(Grails 过滤器或常规 servlet 过滤器)不会参与该方法调用,即使您正在调用的方法是控制器操作并且配置了通常适用于对该操作的调用的过滤器。你真的不应该直接调用控制器操作方法。如果该方法包含您可能想要调用的帮助代码,则将该代码放在常规的非操作方法中(使其不公开),然后从任何有意义的地方调用它。通常一个更好的主意是将该方法完全移出控制器并将其放入一个辅助类中,这样它将有许多好处,包括它可以在适当的地方重用,与控制器分开测试等。这助手类可能是也可能不是 Grails 服务,具体取决于它的使用方式和用途。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      你可以使用

      forward action: "second"
      

      转发请求而不发出 HTTP 重定向。

      【讨论】:

      • Wii结果一样吗?我不能按以下方式调用该函数吗- second()
      • 在转发的情况下,同一个请求被转发到另一个资源,所以所有的请求参数和请求属性都是可用的。
      • 如果 second() 是私有的,您可以将其视为函数,但不会将其视为操作。
      • @Abdullah - “如果 second() 是私有的,您可以将其视为函数,但不会将其视为操作。”...该方法不需要是私有的。它只需要不公开。
      猜你喜欢
      • 1970-01-01
      • 2017-04-25
      • 2015-06-24
      • 2014-05-19
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多