笔记二
render
render()就是一个result方法,用于执行和显示一个模板。当程序每次执行到render()的时候,就会发送一个请求到页面,如果没有参数的话就是直接进入到route文件配置的所对应的页面。
比如在Application中,在route文件中的配置如下:
GET
/
Application.index
Expressions: ${…}
要创建一个动态元素,最简单的方法就是声明一个表达式。语法为${…},表达式的最终结果将被插入在表达式使用的地方。
如:
<h1>Client ${client.name}</h1>
如果不确定client对象是否为null,则可以使用如下的groovy语法:
<h1>Client ${client?.name}</h1>
如果client不为null,则显示,否则不显示
这样就可以把类中render方法中的参数显示到html页面中
Tags: #{tagName /}
一个tag就是一个可以带参数的模板碎片,如果只有一个参数,则默认的参数名称就是arg,而且arg可以省略。
例如,如下的tag用于插入一个javascript脚本:
#{script 'jquery.js' /}
tag必须是关闭的:
#{script 'jquery.js' /}
或
#{script 'jquery.js'}
#{/script}
例如,list标签用于迭代所有的集合元素,它带有两个必须的参数items和as:
<h1>Client ${client.name}</h1>
<ul>
#{list items:client.accounts, as:'account' }
<li>${account}</li>
#{/list}
</ul>
items是要遍历的集合,as是作为遍历时使用的变量名
mappedBy= "post", cascade=CascadeType.ALL
属性mappedBy表示用Comment类的post属性是控制端,负责关联关系的管理。当你定义了双向关联后,指定哪方来维护关联关系非常重要。在这个例子中,因为每一个Comment都属于一个Post,所以Comment上的post属性表示Comment于Post的反转关系。
级联删除 cascade=CascadeType.ALL。当我们删除Post时,级联下的Comment统统都会跟着一起删除。
div class="image"说明标签的div的class(类名)是image; 如果div id="image"说明标签的div的ID名是image; 不同在于单个网页总class可以重复出现,id只用一次