您的位置:首页 > Web前端 > JavaScript

编写JSP自定义标签

2013-11-23 12:43 316 查看
可以使用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指令如下

 

<%@attribute name="pageInfo" type="com.rmc.web.utils.Pages" rtexprvalue="true" required="true" %>

 
 

这里声明了一个pageInfo属性,并指定了参数的具体类型.rtexprivalue="ture"表明该属性接受EL表达式,false表示不接受. required="true"表示该属性为必须的,默认值是false.一个简单的TagFile如下

 

<%@tag body-content="empty" pageEncoding="gbk" %>
<%@attribute name="pageInfo" type="com.rmc.web.utils.Pages" rtexprvalue="true" required="true" %>
<script type="text/javascript">
function toPage(pageNo) {

document.getElementById("page_no").value = pageNo;
document.getElementById("form_submit").click();
}
</script>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
共${pageInfo.allRecords}条 <a href="#" onclick="toPage(1)">首页</a> 
<a href="#" onclick="toPage(${pageInfo.cpage}-1)">上一页</a> 
<a href="#" onclick="toPage(${pageInfo.cpage}+1)">下一页</a> 
<a href="#" onclick="toPage(${pageInfo.allPages}+0)">末页</a> ${pageInfo.cpage}/${pageInfo.allPages}页   
转到:第 <input id="page_no" name="page" type="text" style="width: 26px;"/> 页 
每页 <input name="pageSize" type="text" value="${pageInfo.pageSize}" style="width: 26px;"/> 条 
<input id="form_submit" type="submit" value="GO"/>
</td>
</tr>
</table>


 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的目录.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: