我是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 !")
}
我对路由的概念和@完全感到困惑,所以我不太确定哪个部分做得对,哪个部分做错了。请指出我的错误。
提前致谢。
答案 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 Submission和Form Helper。