编写JSP自定义标签
可以使用JSP自定义标签来实现简单的代码模板.
自定义标签可以通过传统的继承TagSupport或SimpleTagSupport并实现相关方法,然后声明使用tag描述符进行声明.
?
这里要说的是一种更加简单的方式,TagFiles.
Tag File其实就是一个JSP页面,只是把扩展名由.jsp变成了.tag,并放置在指定的目录下.
TagFile中不能使用page指令,作为替代可以使用tag指令,在tag指令中声明pageEncoding来指定文件编码,这尤为重要.
attribute指令用来指定调用tag可以使用的参数.
例如<v:table model="${model}"> ?这里的model就是在TagFile中通过attribute指令进行指定的.
具体的attribute指令如下
?
??
这里声明了一个pageInfo属性,并指定了参数的具体类型.rtexprivalue="ture"表明该属性接受EL表达式,false表示不接受.?required="true"表示该属性为必须的,默认值是false.一个简单的TagFile如下
?
?tag指令中有一个body-content参数,取值有三个scriptless(不接受jsp脚本,接受普通文本和EL.这也是默认值),empty(不接受标签体),tagdependent(将标签体视为普通文本).可见表标签体是绝对不接受jsp脚本的,当然使用标签的目的就是为了不直接在jsp中使用脚本.当该参数取值不为empty时,在TagFile中可以使用<jsp:dobody/>引用标签体的内容.
TagFile编写好之后,需要放置在应用的WEB-INF/tags/目录或其子目录下.如果你的TagFile要作为一个库发布,需要将TagFile放置在jar的META-INF/tags/目录或其子目录下,同时还要编写tag描述符(.tld)文件放置在META-INF/TLDs目录下.有关.tld的编写也比较简单只是把TagFile中的各种指令使用xml文件重新声明一次.具体写法就不讨论了,可以参考其他文档.
有了TagFile后,在jsp中引用时想引用JSTL一样,要首先使用taglib指令进行声明.例如<%@ taglib prefix="v" tagdir="/WEB-INF/tags" %>这里与引用JSTL不同的是将taguri换成了tagdir,其值就是放置TagFile的目录.