Play学习 - 体验网页模板
在经过无数个尝试后,最终用sbt把play所依赖的所有包都下载下来了,现在可以非常快速编译运行了。今天体验了下网页模板,觉得非常不错,在这里做个简单的介绍。
原文说明:
A Play Scala template is a simple text file that contains small blocks of Scala code. Templates can generate any text-based format, such as HTML, XML or CSV. The template system has been designed to feel comfortable to those used to working with HTML, allowing front-end developers to easily work with the templates. Templates are compiled as standard Scala functions, following a simple naming convention. If you create a views/Application/index.scala.html template file, it will generate a views.html.Application.index class that has a render() method.
大致意思就是,你所建立的xxx.scala.html模板文件会编译成标准的scala对象和方法,比如说你创建一个index.scala.html,则会自动对应生成views.html.Application.index类,这里包含一个render的方法来指你本html。
我决定做一个路由,这个路由专门用来我学习play framework的,路径是/help,那么按照如下步骤:
1、编写模板文件 help.scala.html, 代码如下:
@(title: String)(message: String) <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>@title</title>
</head>
<body>
@play20.welcome(message, "java");
</body>
</html>
@(title:String)(message:String)相当于这个模板的传入参数,可以把这个模板比作一个方法,最上面是定义模板的形式参数,下面的html语言是网页实现,通过@某一个参数可以获取参数的值,如代码中得@title。此时会自动生成views.html.Application.help类,包含一个方法render,这个方法的参数就是@(title:String)(message:String)。所以在action中就调用render来跳转到模板网页中去了。
如下代码是Play自动生成的help类,scala代码的。
package views.html import play.twirl.api._
import play.twirl.api.TemplateMagic._ object help_Scope0 {
import models._
import controllers._
import play.api.i18n._
import views.html._
import play.api.templates.PlayMagic._
import java.lang._
import java.util._
import scala.collection.JavaConversions._
import scala.collection.JavaConverters._
import play.core.j.PlayMagicForJava._
import play.mvc._
import play.data._
import play.api.data.Field
import play.mvc.Http.Context.Implicit._ class help extends BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable,Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat) with play.twirl.api.Template2[String,String,play.twirl.api.HtmlFormat.Appendable] { /**/
def apply/*1.2*/(title: String)(message: String):play.twirl.api.HtmlFormat.Appendable = {
_display_ {
{ Seq[Any](format.raw/*1.34*/(""" """),format.raw/*3.1*/("""<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>"""),_display_(/*7.11*/title),format.raw/*7.16*/("""</title>
</head>
<body>
"""),_display_(/*10.6*/play20/*10.12*/.welcome(message, "java")),format.raw/*10.37*/(""";
</body>
</html>"""))
}
}
} def render(title:String,message:String): play.twirl.api.HtmlFormat.Appendable = apply(title)(message) def f:((String) => (String) => play.twirl.api.HtmlFormat.Appendable) = (title) => (message) => apply(title)(message) def ref: this.type = this } } /**/
object help extends help_Scope0.help
/*
-- GENERATED --
DATE: Sun Nov 29 14:50:01 CST 2015
SOURCE: /Users/cmlanche/web/play/workspace/play-java/app/views/help.scala.html
HASH: f50344195cfc33a1de3984c7d4cfc968c803534c
MATRIX: 750->1|877->33|905->35|1006->110|1031->115|1086->144|1101->150|1147->175
LINES: 27->1|32->1|34->3|38->7|38->7|41->10|41->10|41->10
-- GENERATED --
*/
@play20.welcome(message, "java"); 这个是play自带的说明文档网页
2、编写控制器,在Application中,或者说任意继承自Controller的类中
public Result help() {
return ok(help.render("Play Framework帮助文档", "this is doc of play framework for java"));
}
3、映射路由
# Play Framework help doc
GET /help controllers.Application.help()
这样就完工了,这时只需要打开 http://127.0.0.1:9000/help 就可以了。
开发完成后,只需要刷新页面即可,不需要重新run起来,这时Play的一大亮点,开发快速。
Play!的关键特性:
1、一个非常简单的开发周期。此框架自动编译和重新装载源文件的任何改变。
2、智能捆绑HTTP参数到Java方法参数。
3、基于Jboss Netty框架的快速HTTP服务器,使Play能支持高并发、长连接以及静态文件优秀的输出能力。
4、一个基于Groovy的强大的模板引擎,具有多层继承,定制用户标签的能力,高可拓展性等。
5、优秀的错误报告功能:当发生异常,此框架会直接显示出错代码,甚至是模板代码。[1]
6、易于实现非阻塞、大并发
Play学习 - 体验网页模板的更多相关文章
- 【Knockout.js 学习体验之旅】(3)模板绑定
本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(2)花式捆绑
本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 15款免费的 HTML5/CSS3 响应式网页模板
如果你想快速制作出一个优秀的网站,网站模板一定是必不可少的.网页设计师和开发人员也可以从网站模板入手,学习先进的布局方式和编码风格.下面这个列表为大家挑选了15款免费的 HTML5/CSS3 响应式网 ...
- 在线学习体验大PK 云智慧发布在线教育网站性能监测报告
互联网不但改变了我们的生活.娱乐和消费方式,也推动各行各业进行着快速变革,越来越多的职场人士必须通过不断的学习.充电才能跟上行业发展的步伐,获得职业的提升,而这也引发了国内教育市场的爆炸式发展.据统计 ...
- (转)dedecms网页模板编写
网页模板就是templets中的htm文件,所以编写模板就是要编写html.这篇文章不是关于标签的具体使用,而是对网页模板的一些理解.包括基本的标签语法,封面模板,列表模板和文档模板的关系. 一 关于 ...
- render_template 网页模板
模板简单介绍: 视图函数:视图函数就是装饰器所装饰的方法,视图函数的主要作用是生成请求的响应,这是最简单的请求.实际上,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内 ...
- Flask网页模板的入门
#网页模板需要导入render_template from flask import Flask,render_template 方法一: #使用render_template模块来渲染模板文件 ...
- 快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力
为了寻找一个优质的网页模板,网页设计师和开发者往往可能会花上大半天的时间.不过幸运的是,现在的网页设计师和开发人员已经开始共享HTML5,Bootstrap和CSS3中的免费网页模板资源.鉴于网站模板 ...
随机推荐
- 【iOS】7.4 定位服务->2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- Linux之lsof命令
lsof是一个列出当前系统中所有打开文件的工具 lsof filename 显示打开指定文件的所有进程 lsof -c string 显示COMMAND中包含指定字符的进程的所有打开文件 ...
- JavaScript作用域链和垃圾回收机制
作用域链 基本概念: 在了解作用域链和内存之前,我们先了解两个概念,分别是执行环境和变量对象. 执行环境:定义变量或者函数有权访问的其他数据,决定了它们各自的行为.每个对象都有自己的执行环境. 变量对 ...
- devcpp中很简单的排序
之前学的东西,不知什么缺了,什么没缺,索性重头开始弄,用的是<啊哈!算法>. 排序很简单,小的可以选择死磕.直接贴一份代码. #include<iostream> #inclu ...
- 数位dp初步——数位dp的两种方式
数位dp:一类统计区间[L,R]内某种符合规定的数字个数的题目.特征是R的范围会很大,O(N)范围内无法完成. 一般而言,解决这类题目有两种方式,一种是递推,另一种是记忆化搜索. 递推: 1)利用dp ...
- Python之路-Linux命令基础(4)
作业一: 1)开启Linux系统前添加一块大小为15G的SCSI硬盘 2)开启系统,右击桌面,打开终端 3)为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大 ...
- 老李分享:天使投资 vs. 风险投资 vs. 私募股权融资
天使投资(Angel Capital) 创意阶段(idea stage)到种子阶段(seed stage) 0 – 1百万美元营业额 还没有盈利 小股东 风险异常的高 不存在负债情况 风险投资(Ven ...
- Android通过AOP实现防止按钮连续点击
防止连续点击的实现方式有很多种,比如,在所有的onclick里面加上防多次点击的代码,或者定义一个新的OnClickListener,在里面加上防多次点击的代码,然后项目中的所有OnClickList ...
- zookeeper入门与实践
概述 Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统,可提供的服务主要有:配置服务.名字服务.分布式同步.组服务等. 它有如下的一些特点: 简单 Zookeeper的核心是一 ...
- css定位流布局
上面我们一起研究了浮动布局的特点和如何清除浮动给布局带来的不良影响,今天我们继续来研究定位流布局的特点和一些常用的布局技巧. 定位流主要有三种,一是相对定位,二是绝对定位,三是固定定位:下面我们一一进 ...