我在哪里放置我需要在Play Framework中的所有网页上运行的代码?

时间:2011-11-14 20:11:05

标签: java model-view-controller playframework

我提前为这个有点无知的问题道歉,但我在过去一周内自己研究了这个问题。我的最后一招是来到这里,因为我知道堆栈溢出的人是最聪明的。

我是一个ASP.NET人员,最近根据公司的授权切换到Play。我有点失落。 MVC对我来说是新的,ORM让我完全害怕。

我已经浏览了playframework.org上的教程,虽然我能够构建一个博客引擎,但我只是将他们教程中的代码转录到我自己的程序中,所以我不觉得我真的学到了什么。

现在我不得不写一个PLay版本的.NET网站。所以问我的问题。

在我的Play应用程序的每个网页上,我需要运行一些生成大量HTML字符串的Java代码,然后将该html字符串吐出到某个地方的视图上的标签上。它就像一个100行函数,它最终返回一个我呈现给客户端的字符串。在我的.NET网站中,我把它放在我的母版页的“代码隐藏”中。

问题是Play中的母版页没有代码隐藏。那么我在哪里放置所有需要在每个页面上执行的java代码?我开始查看控制器,但它不是我转发到渲染函数的对象,它是一个100行函数,它执行一堆逻辑并返回一个巨大的字符串。我需要在每个屏幕上都有这个代码,因此将它放在控制器级别是没有意义的,因为我每次都必须将它传递给“渲染”,并且我有100个动作。

这真的引出了一个更大的问题,如果你的代码不是一个模型并且在控制器中没有意义,你在哪里坚持使用Play?无论如何,提前谢谢。

干杯 约什

2 个答案:

答案 0 :(得分:0)

  

我在每个屏幕上都需要这个代码,因此将它放在控制器级别是没有意义的,因为我每次都必须将它传递给“渲染”,并且我有100个动作。< / p>

对于这些情况,您可以使用@Before注释。在您的控制器中:

@Before
public static void bigFunction() {
   String result;
   // Do a lot of stuff...
   renderArgs.put("yourLabel", result);
}

在您的模板中,您现在可以通过以下方式访问它:

${yourLabel}

答案 1 :(得分:0)

我认为马吕斯有你在短期内寻找的答案。但是恕我直言,如果你花时间去研究这个功能并将其正确地重新实现到MVC组件中,那么你的继任者(或者你自己一年后)会做得很好。也就是说,将数据表示和操作内容放入模型中,并将HTML生成内容放入视图标记或main.html模板中。