在Play框架中,如果您从控制器的公共方法调用,则始终遵循Redirect-After-Post-Pattern。这在大多数情况下是良好的行为,但有时可能会引起问题。
因此,我尝试查找在Play 1.1中如何实现它:
基本原理是一些字节码增强,这在play.classloading.enhancers.ControllersEnhancer
中完成。
在那里,您可以发现仍然存在一些默认行为的例外:
- 如果您的方法由来自
play.mvc
包的注释注释,例如Before注释。 - 使用ByPass注释注释您的操作,该注释必须是内部类,因此名称以$ByPass结尾。
这两种解决方案都可以适用于您始终希望禁止重定向的情况。但如果您只想在特殊情况下执行此操作怎么办?
那么,您可以调用ControllerInstrumentation.initActionCall()
。
我没有找到关于它的描述,我只是分析了代码。我的结论是否正确或是否存在任何缺点?