1、在上文中我们已经介绍了自定义标签的使用,那么在自定义标签中如何输出标签体和标签之外的内容呢?我们先在.tld文件中定义一个标签名字为test,然后在jsp文件中引用该标签,下图是标签的使用以及项目的文档结构。
2、接下来我们创建一个DemoTag2类继承自S坡纠课柩impleTagSupport,我们在doTag()方法中获取标签体的内同柙丕牌容对象JspFragment,同时通过pageContext获取输出对象out,最后通过调用invoke方法将标签体的内容输出到指定的Writer中,当然我们也可以使用invoke(null),默认会往浏览器中输出。
3、我们在jsp中使用该自定义标签demo,并在标签中任意给定一个标签体(我爱北京),然后在标签之外再输入一些文字。那么如何控制标签体外的内容不输出呢?我们需要修改DemoTag2中的doTag()方法,在方法的末尾抛出一个SkipPageException(),之后便不会输出标签体的内容。我们启动tomcat后访问该jsp页面可以看到效果,这里不再展示了。
4、接下来我们介绍如何循环输出标签体的内容,同样我们需要修改DemoTag2中的doTag()方法,循环调用invoke(null)方法即可,在浏览器中输出的结果如下图所示。
5、接下来我们介绍如何改变标签体的内容,我们首先要获取标签体的内容,并使用一个临时容器来放标签体的内容,接着我们从临时容器中取出标签体的内容并且修改输出,同时我们也输出未修改前的标签体内容作为对比,如下图所示。
6、小面我们介绍自定义有属性的标签,我们在DemoTag2这个类中定义两个属性name和age,然后然后编写setter方法,当用户通过标签设置属性时,就会调用其中的setter方法完成属性的赋值,代码如下图所示。
7、接下来我们修改tld文件,在标签的定义中添加两个<attribute>,并定义<name>名称,<required>是否为必须的,<rtexprvalue>是否支持正则表达式,然后我们在DemoTag2中的doTag()方法中输出这两个属性,如下图所示。
8、最后我们在jsp中调用该标签,并给标签设置name和age属性,启动tomcat后输出的结果如下图所示。