在Play Framework中使用Scala构建URL /页面链接 - 单击以打开新页面

时间:2016-09-22 18:14:39

标签: scala playframework

我是Scala的新手,我正在尝试构建一个href链接到一个已经使用HTML和JavaScript构建的网站中的另一个页面。所有链接都设置为:

<a href="mypage.html">

我一直在研究Scala,并且了解它比仅仅引用另一个页面更多的路由和配置。我也明白其他html页面似乎是用作main.scala.html页面中@content标签的单页面应用程序设置。我对这个描述可能有误,但这对我来说是有道理的。

我已经设置了一个新的Scala页面并在我的HTML中引用它:

<div class="col-lg-3 col-md-3 col-sm-6 col-xs-6 col-ss-12 margbot30">
<a class="services_item" href="@views.html.login3(loginForm)">
<p>
<b>New</b> User Account
</p> <span>Sign up for a user account</span>
</a>
</div>

它没有给我一个错误,但实际上在<div>标记中显示了login3.scala.html页面。我想点击文本,然后打开该页面。

如何让此链接或路由正常工作?

我找到了这篇文章,但我仍然不确定该怎么做: Play! Framework - creating simple html links

我感谢帮助和任何代码示例。

1 个答案:

答案 0 :(得分:2)

"@views.html.login3(loginForm)"正在做的是调用Scala函数login3,并将生成的内容呈现到页面中。

不要考虑链接到页面的页面,而应考虑链接到控制器的页面。

如果您有这样的控制器:

package controllers;

class FooController extends Controller {

  def foo = Action { request =>
    Ok(views.html.foo())
  }

  def bar = Action { request =>
    Ok(views.html.bar())
  }
}

这是通过路径文件公开的

GET  /foo   controllers.FooController.foo
POST /bar   controllers.FooController.bar

在您的视图中,您可以使用生成的路由来定义超链接:

<a href="@routes.FooController.foo()">whatever</a>

所以在你的情况下,而不是使用

<a class="services_item" href="@views.html.login3(loginForm)">

你会改为

<a class="services_item" href="@routes.SomeController.theFunctionThatRendersLogin3()">