如果我在同一个类中获得与以下代码中的重定向操作相同的结果,我不能只调用那么函数“second”没有重定向动作吗?
class SampleController {
def first() {
// redirect to the "second" action...
redirect action: "second"
}
def second() {
// ...
} }
答案 0 :(得分:2)
我不能只调用函数" second"如果我没有重定向动作 在同一个类中获得相同的结果我会得到重定向 以下代码中的操作?
当然,您可以在控制器操作中调用方法,但是否获得相同的结果取决于许多因素。解决此问题的最佳方法是了解重定向,转发和调用方法之间的差异。了解这些将有助于您了解每一个是否有意义。
当您启动重定向时,响应会被发送回客户端,其中包含的信息会导致客户端将单独的请求发送回您的应用程序。完整的HTTP往返。转发类似于重定向,除非它全部发生在第一个请求中。控制被发送到转发的动作,而不需要返回到客户端并让它发送第二个请求。调用方法与所有方法不同。调用方法只是调用一个方法,当你这样做时,有很多事情不会发生。例如,过滤器(Grails过滤器或常规servlet过滤器)将不参与该方法调用,即使您调用的方法是控制器操作,并且配置了通常适用于对该操作的调用的过滤器。你真的不应该直接调用控制器动作方法。如果该方法包含您可能要调用的帮助程序代码,请将该代码放在常规非操作方法中(使其成为非公共方法),然后从有意义的任何地方调用它。通常更好的想法是将该方法完全移出控制器并将其放在辅助类中,它将具有许多好处,包括可以在适当的地方重新使用,与控制器分开测试等。辅助类可能是也可能不是Grails服务,具体取决于它的使用方式和操作方式。
我希望有所帮助。
答案 1 :(得分:0)
您可以使用
forward action: "second"
转发请求而不发出HTTP重定向。