【问题标题】:Using Controller Methods in View - Play Framework - Scala在视图中使用控制器方法 - Play Framework - Scala
【发布时间】:2016-10-08 09:33:20
【问题描述】:

我必须在 Web 项目上使用 Play Framework,我必须在其中将视图与控制器类连接起来。意思是,我必须在视图(scala.html)中使用在控制器(scala)中声明的方法。 我真的不知道怎么做。 我尝试过类似

     @controller.class.method()

但它没有工作。 我查了一下,没找到,可能是太简单了,没人会问..?

感谢您的帮助。

【问题讨论】:

  • 您能举个例子说明您要达到的目标吗?

标签: html scala playframework


【解决方案1】:

您可以通过以下方式访问模板中的反向路由:

@routes.controllersFolder.MyControllerName.endPointName

这将解析路由。

例如路由文件:

GET   /myApp/endpointExample  controllersFolder.MyControllerName.endPointName

所以

@routes.controllersFolder.MyControllerName.endPointName

将解析为:

/myApp/endpointExample

如果您希望在客户端将其用于 AJAX,我强烈推荐 JSRoutes

如果你想拥有控制器的功能,那么你应该将它解耦到一个模块中,例如:

trait MyTrait {
  def add(x: Int, y: Int): Int = x + y
}

@Singleton 
class MyClass with MyTrait

@Singleton
class MyController @Inject() (myClass: MyClass) extends Controller {
  def endPointName(x: String, y: String): Action[AnyContent] = {
    try {
      Ok(
        Json.toJson(
          Json.obj(
            "result" -> myClass.add(
              x = x.toInt,
              y = y.toInt
            )
          )
        )
      )
    } catch {
      case e: NonFatal => BadRequest(
        Json.toJson(
          Json.obj(
            "error" -> e.getMessage
          )
       )
    }
  }
}

然后您可以参考 MyClass 的逻辑,而不必形成请求,将逻辑解耦如下:

@Singleton
class MyOtherController @Inject() (myClass: MyClass) extends Controller {
  def myHtmlPage(): Action[AnyContent] = {
    views.html.myView(myClass)
  }
}

在 HMTL 中

myView.scala.html:

@(myClass: MyClass)

@myClass.add(1, 2) // = 3

我希望这会有所帮助, 里斯

【讨论】:

    【解决方案2】:

    如果你想在视图中调用控制器,你应该在reverse routes的帮助下进行

    假设你的路由是这样定义的

    GET   /hello/:name          controllers.Application.hello(name)
    

    在视图中,您可以使用以下代码调用它

    @routes.Application.hello("test")
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      相关资源
      最近更新 更多