Grails - 重定向请求

时间:2014-10-21 08:15:37

标签: grails redirect grails-controller

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

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

2 个答案:

答案 0 :(得分:2)

  

我不能只调用函数" second"如果我没有重定向动作   在同一个类中获得相同的结果我会得到重定向   以下代码中的操作?

当然,您可以在控制器操作中调用方法,但是否获得相同的结果取决于许多因素。解决此问题的最佳方法是了解重定向,转发和调用方法之间的差异。了解这些将有助于您了解每一个是否有意义。

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

我希望有所帮助。

答案 1 :(得分:0)

您可以使用

forward action: "second"

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