播放框架Javascript路由器不工作的控制器在不同的目录

Play framework Javascript router not working for controller in different directory

本文关键字:控制器 工作 框架 Javascript 路由器 播放      更新时间:2023-09-26

这个问题是关于让Play的javascript路由器

生成play2的简洁方法's javascript router

我的路由文件中有两个路由映射:

GET     /attachments/:id/content      com.application.controllers.File.getOrderContent(id:String)
POST    /drive                        com.application.controllers.myapp.Drive.createDrive()

我在scala文件中有一个非冗长的Javascript路由器代码:

val routeCache = {
  import routes._
  val jsRoutesClass = classOf[routes.javascript]
  val controllers = jsRoutesClass.getFields().map(_.get(null))
  controllers.flatMap { controller =>
    controller.getClass().getDeclaredMethods().map { action =>
        action.invoke(controller).asInstanceOf[play.core.Router.JavascriptReverseRoute]
    }
  }
}
def javascriptRoutes = Action { implicit request =>
    Ok(Routes.javascriptRouter("jsRoutes")(routeCache:_*)).as("text/javascript")
}

当我使用

时,我得到一个"未捕获的类型错误:无法读取未定义的属性'Drive'"
jsRoutes.com.application.controllers.myapp.Drive.createDrive().ajax({...

jsroutes.com.applicationcontrollers . file . getordercontent ().ajax({… works fine

对于为什么com.application.controllers.myapp.Drive路径不能被路由器识别有什么想法吗?我认为路由目录中的所有路径都应该包含在jsRoutes中。

每个包生成一个one routes对象和一个javascript。所以在你的情况下,你会有controllers.(routes|javascript)包含所有的控制器路径controllers包中的控制器和controllers.myapp中的单独的controllers.myapp.(routes|javascript)

您可以在target/scala-[version]/src_managed/main/controllers/routes.javatarget/scala-[version]/src_managed/main/controllers/myapp/routes.java下找到生成的源代码