如果我在同一个类中获得与在以下代码中使用重定向操作所获得的结果相同的结果,我是否不能立即调用没有重定向操作的函数“second”?
class SampleController {
def first() {
// redirect to the "second" action...
redirect action: "second"
}
def second() {
// ...
} }
最佳答案
Can't I just call then function "second" with no redirect action if I in the same class to get the same result i would get with redirect action in the following code?
当然,您可以从 Controller Action 中调用方法,但是您能否获得相同的结果取决于许多因素。解决此问题的最佳方法是了解重定向,转发和调用方法之间的区别。了解这些内容将帮助您理解它们何时有意义。
当您启动重定向时,响应将连同信息一起发送回客户端,该信息会导致客户端将单独的请求发送回您的应用程序。进行了完整的HTTP往返。转发与重定向类似,除了转发都发生在第一个请求中。将控制发送到转发的操作,而无需返回到客户端并让它发送第二个请求。调用方法不同于所有方法。调用方法就是调用方法,并且这样做很多事情都不会发生。例如,过滤器(Grails过滤器或常规Servlet过滤器)将不参与该方法调用,即使您正在调用的方法是 Controller 操作,并且配置了通常适用于对该操作的调用的过滤器。您实际上绝对不应直接调用 Controller 操作方法。如果该方法包含您可能要调用的帮助程序代码,则将该代码放入常规的非操作方法中(使其不公开),然后从有意义的任何地方调用它。通常,一个更好的主意是将该方法完全移出 Controller ,并将其放入帮助器类中,在该类中它将有很多好处,包括可以在适当的地方重新使用,与 Controller 分开进行测试等。 helper类可能是Grails服务,也可能不是Grails服务,这取决于其使用方式和作用。
希望对您有所帮助。
关于grails - Grails-重定向请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481898/