0

我正在使用播放框架 1.2.5。我正在使用从控制器调用的辅助方法(它在控制器中 - 我不确定它是否真的属于模型或其他地方)但它的返回类型是无效的。我相信这会导致控制器从该方法返回,而不是返回到调用方法(从调用助手的位置)。除了传递像 int 或 boolean 这样的返回类型,我还能做些什么来避免这个问题?

public class TestController extends Controller {

public static controllerMethod() {
helperMethod();
}

public static void helperMethod() {
    //some code 
    }

}

我猜我可以将辅助方法移动到模型中,也可以简单地将 boolean/int 作为返回类型传入 - 还有其他建议吗?谢谢

4

3 回答 3

1

在你的controllerMethod,你必须调用一些渲染方法:

public static controllerMethod() {
  helperMethod();
  render() // or ok() to return http code 200
}

并声明你的helperMethod私人。将方法设为私有可防止正常控制器方法的浏览器重定向行为。

于 2013-04-30T20:28:53.967 回答
1

您不希望 Controller 类中有任何额外的辅助方法或变量!将其移至模型类(模型类甚至不必扩展模型 - 只是不要扩展控制器)。

对控制器方法的每次调用都不像普通的 Java 方法调用。它做了很多额外的事情并强制浏览器重定向到该方法。它永远不会恢复原始方法中的代码!

所以在控制器方法中这样的代码(其中 computeSomething 是控制器的静态方法)

  ...
  computeSomething();
  renderText("this will never be shown")

您想在控制器中调用另一个方法的唯一时间是您想要进行重定向。一个典型的例子是检查身份验证并重定向到登录页面。

于 2013-04-30T20:29:46.330 回答
1

您可以通过使用 @Util 注释辅助方法来选择在浏览器无法访问它的情况下使用辅助方法

public class TestController extends Controller {

public static controllerMethod() {
     helperMethod();
}

@Util
protected static String helperMethod() {
    //some code 
    }

}
于 2013-06-19T21:15:05.817 回答