加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 更不用说产生Play 2的JavaScript路由器的方式

发布时间:2020-12-16 19:05:12 所属栏目:安全 来源:网络整理
导读:目前我以一种比较详细的方式定义了我的应用程序的 JavaScript路由器 def javascriptRoutes = Action { implicit request = import routes.javascript._ Ok(Routes.javascriptRouter("jsRoutes")( Login.method1,Login.Method2,OtherController.method1,Other
目前我以一种比较详细的方式定义了我的应用程序的 JavaScript路由器

def javascriptRoutes = Action { implicit request =>
  import routes.javascript._
  Ok(Routes.javascriptRouter("jsRoutes")(
    Login.method1,Login.Method2,OtherController.method1,OtherController.method2,//[...]
  )).as("text/javascript")
}

我真正想做的是创建一个javascriptRouter与路由文件中的所有路由,所以我不必手动更新javascriptRoutes定义,每次添加一个新的控制器方法.

有没有办法完成这个任务,或者甚至有一点点简单的定义javascriptRouter的方式?

解决方法

你可以通过这样反思来做:

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")
}

这是从在target / scala-2.x.x / src_managed中找到的生成的源文件导出的.您可以添加自己的源代码并自行解析路由文件,但我发现通过反射更容易做到.

你可能想要做的另外一件事是过滤掉你不想要的方法,因为这将给你所有的路由(包括javascriptRouter本身).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读