§实现 Hello World
要了解使用 Play 的简单性,让我们将自定义的 "Hello World"
问候语添加到此教程应用程序中。
主要步骤包括
- 创建 Hello World 页面
- 添加操作方法
- 定义路由
- 自定义问候语
§1. 创建 Hello World 页面
按照以下说明将新的 Hello World 页面添加到此项目中。
使用任何文本编辑器,创建一个名为 hello.scala.html
的文件,并将其保存在此项目的 app/views
目录中。将以下内容添加到文件中
@()
@main("Hello") {
<section id="top">
<div class="wrapper">
<h1>Hello World</h1>
</div>
</section>
}
此 Twirl 和 HTML 标记实现了以下功能
@
符号告诉模板引擎解释其后的内容。- 在本例中,
@main("Hello")
调用主模板main.scala.html
并向其传递页面标题"Hello"
。 - 内容部分包含
Hello World
问候语。主模板会将此内容插入页面的主体中。
现在,我们准备添加一个操作方法来渲染新页面。
§2. 添加操作方法
要为新页面添加操作方法,请执行以下操作
打开 app/controllers/HomeController.java
(或 .scala
)文件。在教程方法下,在结束括号之前,添加以下方法
- Java
-
public Result hello() { return ok(views.html.hello.render()); }
- Scala
-
def hello = Action { Ok(views.html.hello()) }
为了让 Play 在浏览器请求 hello
页面时调用新的操作方法,我们需要添加一个将页面映射到该方法的路由。
§3. 定义路由
要为新的 Hello 页面定义路由
打开 conf/routes
文件并添加以下行
GET /hello controllers.HomeController.hello
当您向 routes
文件添加路由时,Play 的路由编译器会自动生成一个路由类,该类使用您控制器的实例来调用该操作。有关更多信息,请参阅 路由文档。默认情况下,控制器实例是使用依赖注入创建的(请参阅 Java 和 Scala 的文档)。
现在您已准备好测试新页面。如果您因某种原因停止了应用程序,请使用 sbt run
命令重新启动它。
输入 URL http://localhost:9000/hello 以查看您的工作结果。浏览器应该返回类似以下内容的响应
§4. 自定义问候语
作为本教程的最后部分,我们将修改 hello 页面以接受 HTTP 请求参数。这些步骤包括一个故意的错误,以演示 Play 如何提供有用的反馈。
要自定义 Hello World 问候语,请按照以下说明操作。
在 app/controllers/HomeController.java
(或 .scala
)文件中,使用以下代码修改 hello
操作方法以接受名为参数:
- Java
-
public Result hello(String name) { return ok(views.html.hello.render()); }
- Scala
-
def hello(name: String) = Action { Ok(views.html.hello()) }
在 conf/routes
文件中,在 hello
的末尾添加一个 (name: String)
参数
GET /hello controllers.HomeController.hello(name: String)
在 Twirl 模板中,必须声明所有变量及其类型。在 app/views/hello.scala.html
文件中
- 在文件顶部插入新行。
- 在该行上,添加一个 @ 指令,该指令声明名为参数及其类型:
@(name: String)
- 要在页面上使用该变量,请将
<h2>
标题中的文本从Hello World!
更改为<h2>Hello @name!</h2>
。
最终结果将是
@(name: String)
@main("Hello") {
<section id="top">
<div class="wrapper">
<h1>Hello, @name</h1>
</div>
</section>
}
在浏览器中,输入以下 URL 并将任何名称作为查询参数传递给 hello 方法:http://localhost:9000/hello?name=MyName。Play 会返回一个有用的编译错误,让您知道返回值中的 render 方法需要一个类型化参数
要修复编译错误,请修改 HomeController
中的 hello
操作方法,以便在渲染视图时包含 name
参数
- Java
-
public Result hello(String name) { return ok(views.html.hello.render(name)); }
- Scala
-
def hello(name: String) = Action { Ok(views.html.hello(name)) }
保存文件并刷新浏览器。页面应该显示类似以下的自定义问候语
§摘要
感谢您尝试我们的教程。您学习了如何使用动作方法、路由、Twirl 模板和输入参数来创建自定义的 Hello World 问候语!您体验了模板编译如何使识别和修复问题变得更容易,以及自动重新加载如何节省时间。
这只是一个简单的入门示例。现在让我们看看社区中的其他官方示例和教程。
下一步:Play 教程
在本文档中发现错误?此页面的源代码可以在 此处 找到。阅读完 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。