威凡网全力打造:网页编程、软件开发编程、平面设计、服务器端开发、操作系统等在线学习平台!学编程,上威凡网!
JSP教程>> JSP基础教程 JSP高级教程 JSP常见问题
当前位置:首页 > JSP教程 > JSP常见问题
上一节 下一节
 基于JSP 自定义标签使用实例介绍

添加jsp自定义标签:

先添加一个tld文件到web-inf文件夹中
<?xml version="1.0" encoding="utf-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">

<description>mytag</description>
<display-name>jstl core</display-name>
<tlib-version>1.0</tlib-version>
<short-name>cnweb</short-name>
<uri>http://www.cnweb.cn</uri>

<tag><!-- 一个tag标签对应一个自定义tag标签类 -->
<description>mytag</description>
<name>when</name>
<tag-class>cn.example.when</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
引用规则:
<%@ taglib uri="http://www.cnweb.cn" prefix="cnweb"%>

 定义错误处理页面:

<error-page>
<exception-type>java.lang.exception</exception-type>
<location>/errors/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/errors/error1.jsp</location>
</error-page>

自定义标签执行流程:

simpletagsupport

/* jsp引擎遇到简单类,实例化该类;
* 调用setjspcontext,把页面pagecontext传递给标签处理类;
* 调用setparent把父标传递进去,如果没有,传递null
* 调用setjspbody方法,把封装了标签体jspfragment传递给标签处理器类
* 执行页面中的自定义标签,dotag()方法;-->执行完成,销毁对象
*/

jspfragment jf = this.getjspbody();
jf.invoke(this.getjspcontext().getout());//如果不显示则不进行处理

--------------------------------------------------------------------

public class tagshowornot extends tagsupport {
public int dostarttag() throws jspexception {
return tag.eval_body_include;//显示body
//return tag.skip_body;//隐藏body
//tag.eval_page;//显示page
//tag.skip_page;//隐藏page
}} 

tagsupport
/*编写一个实现tagsupport的类;
*在tld文件中对标签处理器类进行描述(tld文件的位置:web-inf下)
*在jsp页面中导入和使用标签
*
*jsp执行过程中遇到自定义标签时,先实例化该类;
*然后执行方法:setpagecontext()-->setparent()-->dostarttag()
*如果有标签体,一般会执行标签体;doendtag()-->整个标签执行完后一般会执行:release()
*
*控制整个jsp页面是否执行;
*控制jsp页面某一部分内容是否执行;
*控制jsp页面内容重复执行;
*修改jsp页面内容输出;
*/

//该方法在执行标签体后,执行doendtag()方法之前执行,直到该方法返回iterationtag.skip_body;
public int doafterbody() throws jspexception {
time--;
system.out.println("重复" + time);
if (time > 0) {
return iterationtag.eval_body_again;
} else
return iterationtag.skip_body;
}



申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!
上一节 下一节
相关教程  
其他教程  
JSP基础教程
JSP高级教程
JSP常见问题

违法和不良信息举报中心】邮箱:254677821@qq.com
Copyright©威凡网 版权所有 苏ICP备2023020142号
站长QQ:254677821