如何从Play html模板调用Scala函数

时间:2014-08-15 01:30:38

标签: scala playframework

我是Scala / Play Framework的新手。

目前,我正在尝试从我的html页面调用Scala函数:test.scala.html并将哈希参数传递给Scala函数。

我在路线中添加了以下几行:

GET   /hello                      controllers.Application.test
POST  /hello                      controllers.Application.hello

在我的test.scala.html中,我有:

@params = { window.location.hash }
@helper.form(action = routes.Application.hello) {

}

我的hello函数定义为:

 def hello() = Action {
   Ok("Hello !")
 }

我对路由的概念和@完全感到困惑,所以我不太确定哪个部分做得对,哪个部分做错了。请指出我的错误。

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果函数返回一个操作,而不是要在视图(HTML)中格式化显示的内容,您可能希望将请求路由到此操作,从链接单击或表单提交,到路由中配置的URL(aka { {1}})。

要添加参数,您需要将其添加为url查询字符串(例如,对于链接→/hello),或者使用表单的输入/字段(例如/hello?p=1)。

您可以使用反向路由获取URL以调用已配置的操作。例如,表单POST到<input type="text" name="p" value="1" />hello。在这种情况下,您需要查看表单映射,以从请求中提取参数。

答案 1 :(得分:0)

1)路由概念

此路由的主要目的是将每个传入的HTTP请求转换为任何Controller中的Action。通过Reverse Routing,您只需在HTML / Controller / else中使用正确的部分controllers.Application.hello即可。

因此,对于您上面的2个网址,如果有/hello请求GET,那么它可能会说Application控制器和{ {1}}方法。如果您不了解每种路由方法的作用,请阅读此documentation ..

2)神奇的test字符

如果您需要使用@代码或变量,

@是您可以在HTML文件中使用的字符。如果您是PHP开发人员,可以将Scala代码合并到HTML文件中。

以下是您使用此PHP字符可以执行的full-documentation

3)将哈希传递给控制器​​

对于这种特定情况,最简单的方法是通过表单传递值:

@

但是,如果您是新的Play开发人员,那么我担心您需要阅读Play Framework中的Form SubmissionForm Helper