Grails-重定向请求

Grails-重定向请求,grails,redirect,grails-controller,Grails,Redirect,Grails Controller,如果我在同一个类中,为了得到与下面代码中的重定向操作相同的结果,我不能在没有重定向操作的情况下调用then函数“second”吗 class SampleController { def first() { // redirect to the "second" action... redirect action: "second" } def second() { // ... } } 你可以用

如果我在同一个类中,为了得到与下面代码中的重定向操作相同的结果,我不能在没有重定向操作的情况下调用then函数“second”吗

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

forward action: "second"
转发请求而不发出HTTP重定向

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

当然,您可以从控制器操作中调用方法,但是否得到相同的结果取决于许多因素。最好的方法是理解重定向、转发和调用方法之间的区别。了解这些将有助于你理解每一个都有意义

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


我希望这会有帮助。

结果会一样吗?我不能按以下方式调用该函数吗?在转发的情况下,second()将同一请求转发到另一个资源,以便所有请求参数和请求属性都可用。如果second()是私有的,则可以将其视为函数,但不会将其视为操作。@Abdullah-“您可以将second()视为函数。”作为功能,如果它是私有的,那么这将不会被测试为动作。”。。。该方法不需要是私有的。它只是不需要公开。