使用Render
Render是Resource类中已经写好的语法糖,当您需要输出东西时直接调用方法即可。目前支持的视图有 Html、Json、Text、FreeMaker、Hbs。这几种都是可以在 Resource 中直接使用的。
需要注意的是 FreeMaker、Hbs 都需要自行引用相应的依赖,Cloudopt Next 并没有附带。更多代码案例可以看GitHub。
渲染页面时Render会根据配置文件中的 templates 项的配置,自动读取文件,默认是在 templates 文件夹下。
Text
@GET
fun get() {
renderText("test")
}
Json
@GET
fun get() {
var map = hashMapOf<String, Any>()
map["name"] = "andy"
map["age"] = "18"
renderJson(map)
}
当然也支持 Kotlin 的 DSL 语法。
@GET
fun get() {
@GET
fun get() {
renderJson {
template {
parameters["name"] = name
parameters["age"] = age
}
}
}
渲染页面时不需要强制声明后缀名,如 index.html 不需要加 html。根据渲染器的不同会自动加上后缀名。Next 会自动去配置文件中声明的 templates 文件夹位置去找模板文件,
Html
@GET
fun get() {
renderHtml {
template {
name = "index"
}
}
}
如果需要传递参数的话,可以创建一个 View 对象,将模板文件名和传递的参数放入即可。Next 会自动将 parameters 中的数据传递给模板文件。
Freemarker
@GET
fun get() {
renderFree {
template {
name = "index"
parameters["name"] = name
parameters["age"] = age
}
}
}
Hbs
@GET
fun get() {
renderHbs {
template {
name = "index"
parameters["name"] = name
parameters["age"] = age
}
}
}
创建自己的Render
如果您需要使用 Cloudopt Next 尚未支持的模板引擎,您可以自行编写一个 Render。建议参考 JsonRender。
创建好Java类后,在服务器启动前添加进去。
CloudoptServer.addRender("custom",JsonRender())
CloudoptServer.addRender("custom",new JsonRender());
使用时只需要在路由中加上名字调用即可。
render("custom","text")
render("custom","text");
修改默认的Render
默认情况下,如果直接调用render方法,会自动调用JsonRender。如果您需要修改默认的Render,需要调用RenderFactory进行修改。
RenderFactory.setDefaultRender("json")
RenderFactory.INSTANCE.setDefaultRender("json");
静态资源
CSS、JS、图片等静态资源文件是要与模板文件分开的,默认放在static文件夹下,当页面需要引用静态文件时直接引用static文件夹即可。
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon"/>