Play2.5 使用子工程 以及子工程的静态资源
2016-05-05 15:40
369 查看
摘要:Play2.5 中已经大量使用Guice注入,连2.3中的GlobalSetting都舍弃了。有了比较大的变化,其中最大的一个变化就是路由生成的变化,在2.3中只有staticRouteGenerator 一种静态路由生成方法,在2.4中已经加入了InjectedRouteGenerator 注入路由生成方式,但默认的方式还是staticRouteGenerator
,在2.5中默认的路由方式已经是注入方式了。
一、 建立具有子工程的项目
1. 首先新建一个play-java类型的项目,使用最新的activator的话默认的play版本是2.5.3 . 在项目根目录下建立一个modules 文件夹,在该文件夹下 建立一个名为common的工程、
2. 先把common工程中build.sbt中的 lazy val root = (project in file(".")).enablePlugins(PlayJava) 删掉。在sbt.version =0.13.5 下可以不用删除 但是如果sbt的版本高于此版本的话,要删掉 子工程的此处定义,不然会报错 No project found in root.
3.修改common工程conf目录下的routes 改名为 common.routes。此外为了防止类名冲突,最好将子工程app、views下的文件重新放入到另外的pacakge下。
4、修改父工程下的route文件 添加 -> /common common.routes 使其指向子工程路由
5、修改父工程的工程定义文件 build.sbt ,定义子工程lazy val common =(project in file("modules/common")).enablePlugins(PlayJava)
lazy val root = (project in file(".")).enablePlugins(PlayJava)
.aggregate(common).dependsOn(common)
最后使用 localhost:9000/common 测试一下
二、 子工程中使用静态文件
1、如前所述play2.5 的路由生成已经变化,在play.2.5中已经不存在 contollers.Assets类的静态at方法了。使用Assets需要注入其实现类(play已经实现)。就像controller 路由一样,子工程使用静态文件需要使静态文件的路由指向一个返回路由的类方法。 在2.5中如下package controllers.common;
import com.google.inject.Inject;
import controllers.Assets.Asset;
import play.api.mvc.Action;
import play.api.mvc.AnyContent;
import play.mvc.Controller;
public class Assets extends Controller {
@Inject
controllers.Assets asset; //注入实现类
public Action<AnyContent> versioned(String path,Asset file){
return asset.versioned(path,file); //也可以使用at方法
}
}common的路由如下 :
2、反向路由使用
在模版文件中可以这样使用<script src="@controllers.common.routes.Assets.versioned("javascript/bootstrap.min.js")"></script>
备注:如果在views包下新建一个common文件夹,在其中有一个 home.scala.html文件的,那么在controller中这样
调用 views.html.common.home.render("common")
,在2.5中默认的路由方式已经是注入方式了。
一、 建立具有子工程的项目
1. 首先新建一个play-java类型的项目,使用最新的activator的话默认的play版本是2.5.3 . 在项目根目录下建立一个modules 文件夹,在该文件夹下 建立一个名为common的工程、
2. 先把common工程中build.sbt中的 lazy val root = (project in file(".")).enablePlugins(PlayJava) 删掉。在sbt.version =0.13.5 下可以不用删除 但是如果sbt的版本高于此版本的话,要删掉 子工程的此处定义,不然会报错 No project found in root.
3.修改common工程conf目录下的routes 改名为 common.routes。此外为了防止类名冲突,最好将子工程app、views下的文件重新放入到另外的pacakge下。
4、修改父工程下的route文件 添加 -> /common common.routes 使其指向子工程路由
5、修改父工程的工程定义文件 build.sbt ,定义子工程lazy val common =(project in file("modules/common")).enablePlugins(PlayJava)
lazy val root = (project in file(".")).enablePlugins(PlayJava)
.aggregate(common).dependsOn(common)
最后使用 localhost:9000/common 测试一下
二、 子工程中使用静态文件
1、如前所述play2.5 的路由生成已经变化,在play.2.5中已经不存在 contollers.Assets类的静态at方法了。使用Assets需要注入其实现类(play已经实现)。就像controller 路由一样,子工程使用静态文件需要使静态文件的路由指向一个返回路由的类方法。 在2.5中如下package controllers.common;
import com.google.inject.Inject;
import controllers.Assets.Asset;
import play.api.mvc.Action;
import play.api.mvc.AnyContent;
import play.mvc.Controller;
public class Assets extends Controller {
@Inject
controllers.Assets asset; //注入实现类
public Action<AnyContent> versioned(String path,Asset file){
return asset.versioned(path,file); //也可以使用at方法
}
}common的路由如下 :
GET /assets/*file controllers.common.Assets.versioned(path="<span style="color:#FF0000;">/public/lib/common</span>", file: Asset)注意子工程的 path 这里跟2.3不一样,需要”publi/lib/“+子工程名,file要为Asset类型
2、反向路由使用
在模版文件中可以这样使用<script src="@controllers.common.routes.Assets.versioned("javascript/bootstrap.min.js")"></script>
备注:如果在views包下新建一个common文件夹,在其中有一个 home.scala.html文件的,那么在controller中这样
调用 views.html.common.home.render("common")
相关文章推荐
- 解决play out of memory的问题
- Play Framework 安装
- debian7 安装flash player
- play frameword 如何实现在页面表单效验用户名是否存在
- play集群部署问题
- http缓存
- play中使用cookie
- play router plugin
- Google Play Service out of date问题解决
- could not find implicit value for parameter extractor 问题的解决
- [ERROR] IO error while decoding 路径 routes_reverseRouting.scala with UTF-8 问题解决
- Anatomy of a Play application 解析play目录结构
- Play之Scala-Web项目运行流程-简单分析(2)
- play框架配置自定义404页面
- 应用市场地址
- JAVA,Play framework 入门,打印hello word
- play frameword 连接数据库, 查询数据。简单的表单提交
- play framework框架进Debug,右键项目build path 空白(no actions available)等解决问题
- java的play framework安装配置
- Android自定义系列(2)——拟物化类弹窗式视频播放窗口