`

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

 
阅读更多

只要在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,控制器或者标签库.

分享到:
评论

相关推荐

    Grails权威指南

     8.7.2 自定义标签基础内容  8.7.3 演示自定义标签  8.7.4 测试自定义标签  8.8 本章小结 第9章 ajax  9.1 ajax基础知识  9.2 ajax实战  9.2.1 在远程方法调用前后执行代码  9.2.2...

    grails-用户手册

    GSP支持标签库,可以创建自定义的可重用组件。 七、URL Mapping Grails的URL映射非常灵活,可以在`UrlMappings.groovy` 文件中定义,使URL更加语义化,便于SEO优化。 八、构建与部署 Grails使用Gradle作为构建...

    Grails权威指南.pdf

    - **Tags and Tag Libraries**:自定义标签库可以提高视图的可重用性和可维护性。 4. **ORM映射**: - **Domain Classes**:Grails中的领域类定义了数据库表结构,通过GORM自动创建表和字段。 - **Relationships...

    grails 文档

    GSP(Groovy Server Pages)支持自定义标签库,使得视图层逻辑更加清晰,同时提供了内置的标签,如`g:form`、`g:each`等,简化HTML的编写。 总结,Grails框架以其高效开发、丰富的插件、强大的ORM和简洁的语法,...

    grails-core源码

    每个插件都有自己的生命周期方法,可以在特定的生命周期阶段执行自定义操作。 四、依赖注入(Dependency Injection) Grails采用Spring框架的依赖注入,使得对象之间的关系在运行时动态决定,增强了代码的可测试性...

    Groovy轻松入门—Grails实战基础篇

    GSP标签库是另一大特色,可以方便地创建自定义标签,提高代码复用。 5. **GORM与数据持久化**:GORM是Grails对ORM的实现,它自动处理数据库连接和对象映射。通过领域类,开发者可以以面向对象的方式操作数据库,如...

    Grails学习记录

    【标签】:“源码”与“工具”这两个标签暗示了这篇学习记录可能涵盖了Grails框架的源代码解析以及开发者工具的使用技巧。对于“源码”,可能涉及到对Grails内部机制的理解,如控制器、服务、领域模型等的实现;而...

    Grails基础教程

    - **自定义脚手架模块**:提供了创建自定义用户界面生成器的方法。 **6.2 Groovy动态查找器查询和按例查询** - **动态查找器**:Groovy动态查找器提供了一种简洁的方式来查询数据库,简化了SQL语句的编写。 - **...

    grails中文使用手册

    《Grails中文使用手册》是为开发者提供的一份详尽指南,旨在帮助用户快速掌握Grails框架的使用方法。Grails是一种基于Groovy语言的开源Web应用框架,它结合了模型-视图-控制器(MVC)架构模式,旨在提高开发效率,...

    Grails1.3.7-doc

    4. **api**:API文档是开发者的重要工具,提供了Grails框架及其组件的接口定义,包括核心库、服务、控制器、标签库等,通过查阅API,开发者可以知道如何调用框架提供的各种功能。 5. **img**:这个目录下的图像文件...

    Grails完全入门.pdf

    1. **紧密集成Java平台**:Grails充分利用Java平台的优势,如广泛的库支持和工具链,同时保持调用底层Java框架的灵活性。 2. **规约优于配置**:Grails遵循这一原则,通过文件名和目录结构来推断应用程序的结构,...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    14.2.2 开发自定义标签 179 14.3 Grails对Ajax的支持 182 14.4 本章小结 184 第15章 实现Web Service 185 15.1 REST风格的Web Service 185 15.1.1 什么是REST 185 15.1.2 在Grails中实现REST 185 15.1.3 在Client端...

    J1_2006_Grails_PowerPoint_v1.ppt

    - **Tag Libraries**:自定义标签库允许开发者创建可重用的UI组件,提高开发效率。 - **Ajax Support**:Grails对Ajax的内置支持使得页面更新无需刷新,提升用户体验。 - **Scaffolding**:自动生成的临时界面...

    Grails-with-AngularJs:Grails 和 Angularjs

    本篇将深入探讨如何将Groovy on Grails(Grails)作为后台开发框架,与AngularJS这个强大的前端MVC框架相结合,构建出高效、响应式的Web应用程序。 Grails是基于Groovy语言的全栈式Java web框架,它以其简洁的语法...

    grais参考 离线浏览包

    在Grails中,Groovy作为主要的编程语言,用于编写控制器、服务、领域模型等。 **二、Grails 架构组件** 1. **模型(Model)**: Grails 领域模型由Domain Classes组成,它们代表了应用中的业务实体。这些类自动与...

    image-manager:Grails 图像管理器插件

    在视图层,可以使用插件提供的标签库来展示图片,而在控制器中,可以调用插件的API来处理图片操作。 **五、开发与扩展** image-manager插件基于Grails的插件体系,这意味着它本身是可扩展的。开发者可以根据需求...

    curso-groovy-grails-2013

    【标签】:“JavaScript” 提示我们,虽然课程主要关注Groovy和Grails,但可能也涉及了JavaScript的相关内容,因为这两种语言在Web开发中经常一起使用。JavaScript是前端开发的主要语言,与Groovy和Grails在后端交互...

    jspweb框架

    3. **JSP标签库**:JSP提供了自定义标签库(Tag Libraries),例如JSTL(JavaServer Pages Standard Tag Library)和Struts Tags,使得开发者可以使用简洁的标签来替代复杂的Java代码,提高可读性和可维护性。...

    groovy学习

    由于Groovy代码可以无缝调用Java类库,开发者可以在已有的Java项目中轻松引入Groovy脚本,提高生产力。此外,Groovy代码可以被编译为与Java字节码兼容的类,这意味着Groovy程序可以在任何支持Java的环境中运行。 在...

Global site tag (gtag.js) - Google Analytics