2013-04-30 67 views
0

我使用的是播放框架1.2.5。我正在使用从控制器调用的帮助器方法(它在控制器中 - 我不确定它是否真的属于模型或其他地方),但其返回类型是无效的。我相信这会导致控制器从该方法返回,而不回到调用方法(从调用helper的地方开始)。除了传递类型如int或boolean之外,还有什么我可以做的以避免这个问题?回放类型为播放框架中的控制器方法1.2.5

public class TestController extends Controller { 

public static controllerMethod() { 
helperMethod(); 
} 

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

} 

我猜我可以将辅助方法移入模型或简单地传入布尔/ int作为返回类型 - 任何其他建议? 感谢

回答

1

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

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

,并宣布你的helperMethod私人。使该方法保密可防止正常控制器方法的浏览器重定向行为。

+0

我可能没有共享所有的信息 - 只需调用返回void结束helperMethod被重定向到浏览器 - 感谢您的建议 – 2013-04-30 20:42:14

+0

With Play,在Controller中对公共静态方法的调用是重定向,所以这很正常。 – Thierry 2013-04-30 20:44:52

+0

是的,我意识到 - merci! – 2013-04-30 20:46:38

1

您不希望Controller类中有任何额外的辅助方法或变量!将它移动到Model类(模型类甚至不需要扩展Model - 只是不扩展Controller)。

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

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

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

要呼叫控制器的另一种方法的唯一情况是,如果你想要做一个重定向。一个典型的例子是检查身份验证并重定向到登录页面。

+0

是的,它确实重定向 - 我可以避免这种情况的唯一方法是通过从辅助方法中传递返回类型。我想我会将其转到模型并接受答案,除非有人提出了另一种解决方案 - 谢谢! – 2013-04-30 20:40:58

+0

一个很好的经验法则是:你放在控制器类中的代码越少越好!控制器应该保持为'胶水' - 保持你的所有逻辑/等在其他地方:) – 2013-04-30 21:01:18

+0

我同意 - 我是懒惰和愚蠢的平等比例。感谢您指出! – 2013-04-30 21:05:08

1

您可以选择使用的辅助方法,无需通过@Util注释辅助方法能够访问它的浏览器

public class TestController extends Controller { 

public static controllerMethod() { 
    helperMethod(); 
} 

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

} 
+0

感谢您的帮助 – 2013-06-21 14:56:25