Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Grails 自定义标签、标签作为方法调用

来源: zhang1206 分享至:

只要在taglib目录下建立一个Groovy类,在Groovy类里面用闭包就可以定义标签了。比如你要建立一个和HTML有关的自定义标签,那么你可以建立一个HTMLTag.groovy类,然后在里面编写自定义标签。一个闭包就代表一个标签,闭包接收一个Map做为参数,标签属性就放在里面。写完就可以直接调用,不用像JSP那样还要写TLD文件,并且在web.xml文件中引用标签。而且Grails本身也提供了丰富的标签,一般不用写自定义标签。

当Grails在显示模板中遇到一个标签的时候,它会去查找grails-app/taglib/这个地方.Grails会找到每个标签的闭包并执行它们.

eg:

class RaceTrackTagLib {

def formatDate = {

attrs ->

def date = attrs.get('date')

if (!date){

date = new Date()

}

def format = attrs.get('format')

if (!format) {

format = "yyyy-MM-dd HH:mm:ss z"

}

out << new java.text.SimpleDateFormat(format).format(date)

}

}

上面使用了Java的SimpleDateFormat 类来格式化一个date,然后把它写入响应。随后,这个标签能像下列这样在GSP中使用:

<g:formatDate 
 format="dd-MM-yyyy"
 date="${new Date()}"
 />






6.2.2.6 标签作为方法调用

GSP标签和其他标签技术一个主要不同在于,来自 controllers(控制器) , 标签库 或者GSP 视图中的GPS标签可以被当作任意的正规标签或者当作方法被调用.

来自GSPs中的标签当作方法调用

当作为方法被调用时,标签的返回值被当作String实体直接被写入响应中。 因此,示例中的createLinkTo 能等同的看做方法调用:

Static Resource: ${createLinkTo(dir:"images"
, file:"logo.jpg"
)}

当你必须在一个属性内使用一个标签时是特别有用的:

<img src="${createLinkTo(dir:'images', file:'logo.jpg')}"
 />


I在视图技术中,标签内嵌套标签的特性是不被支持的,这样变得十分混乱,往往使得像Dreamweaver这样WYSWIG的工具产生不利的效果以至于在渲染标签时:

<img src="<g:createLinkTo dir="
images" file="
logo.jpg" />
"
 />

来自控制器(Controllers)和标签库的标签作为方法调用

你同样可以调用来自控制器和标签库的标签。标签可以不需要内部默认的g: namespace 前缀来调用,并返回String结果:

def imageLocation = createLinkTo(dir:"images"
, file:"logo.jpg"
)

然而,你同样可以用命名空间前缀来避免命名冲突:

def imageLocation = g.createLinkTo(dir:"images"
, file:"logo.jpg"
)

假如你有一个自定义命名空间 ,,你可以使用它的前缀来替换(例如,使用 FCK Editor plugin :

def editor = fck.editor()









6.3.5 标签命名空间

默认情况下,标签被添加到默认的Grails命名空间,并在GSP页面中和 g: 前缀一起使用。然而,你可以指定一个不同的命名空间,通过在你的 TagLib 类中添加一个静态属性:

class SimpleTagLib {
    static
 namespace = "my"

def example = { attrs -> … } }

这里,我们指定了一个命名空间 my ,因此,稍后在GPS页面中标签库中的标签引用会像这样:

<my:example name="..."
 />


前缀和静态的命名空间 属性值一样.命名空间对于插件特别有用.

命名空间内的标签可以作为方法调用,使用命名空间作为前缀来执行方法调用:

out << my.example(name:"foo"
)

可用于GSP,控制器或者标签库.


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史