技术开发 频道

精通 Grails: 用 Groovy 服务器页面(GSP)改变视图

  高级自定义标记

  更复杂的标记中可以处理属性和标记体。例如,现在的版权标记还需要许多复制/粘贴工作才能满足需求。我想像下面这样将当前的行为放在真正可重用的标记内: FakeCo Inc.。 清单 11 显示了代码:

  清单 11.处理属性和标记体的 Grails 标记

class DateTagLib {
  def thisYear
= {
    out
<< Calendar.getInstance().get(Calendar.YEAR)
  }

  def copyright
= { attrs, body ->
    out
<< "<div id='copyright'>"
    out
<< "&copy; ${attrs['startYear']} - ${thisYear()}, ${body()}"
    out
<< " All Rights Reserved."
    out
<< "</div>"
  }
}

  请注意:attrs 是标记属性的 HashMap。在这里用它提取 startYear 属性。我将以闭包形式调用 thisYear 标记(这与我用大括号时从 GSP 页面所做的闭包调用相同)。类似地,body 也以闭包的形式传递给标记,所以调用它的方式与调用其他标记的方式相同。这样确保了我的自定义标记可以按照任意深度嵌套到 GSP 中。

  您可能注意到,自定义 TagLibs 使用与标准 Grails TagLibs 相同的名称空间 g:。如果需要将自己的 TagLibs 放在自定义名称空间内,请向 DateTagLib.groovy 中添加 static namespace = 'trip'。在 GSP 内,TagLib 现在应该是 FakeCo Inc.

0
相关文章