3.4. 自定义标签

标签形式有俩种,一种是标签函数,第二种是html tag。第二种实际上在语法解析的时候会转化成第一种,其实现是HTMLTagSupportWrapper,此类将会寻找root/htmltag目录下同名的标签文件作为模板来执行。类似普通模板一样,在此就不详细说了

3.4.1. 标签函数

标签函数类似jsp2.0的实现方式,需要实现Tag类的render方法即可

  1. public class DeleteTag extends Tag{
  2. @Override
  3. public void render(){
  4. // do nothing,just ignore body
  5. ctx.byteWriter.write("被删除了,付费可以看")
  6. }
  7. }

如上一个最简单的Tag,将忽略tag体,并输出内容

  1. public class XianDeDantengTag extends Tag{
  2. @Override
  3. public void render(){
  4. doBodyRender();
  5. }
  6. }

此类将调用父类方法doBodyRender,渲染tag body体

  1. public class CompressTag extends Tag{
  2. @Override
  3. public void render(){
  4. BodyContent content = getBodyContent();
  5. String content = content.getBody();
  6. String zip = compress(cotnent);
  7. ctx.byteWriter.write(zip);
  8. }
  9. }

此类将调用父类方法getBodyContent ,获得tag body后压缩输出

tag类提供了如下属性和方法供使用

  • args 传入标签的参数
  • gt GroupTemplate
  • ctx Context
  • bw 当前的输出流
  • bs 标签体对应的语法树,不熟悉勿动