JSP中自定义标记库的使用(二)

来源:互联网 发布:北大软件工程硕士学费 编辑:程序博客网 时间:2024/05/16 11:10

 下面两个方法只有在继承BodyTagSupport类的时候才需要重载4)doInitBody() 

在调用doStartTag()之后,处理标记体之前被调用 
5)doAfterBody() 
在处理完标记体后,调用doEndTag()之前调用。 
该方法的返回值代表对标记体的处理方式: 
IterationTag.EVAL_BODY_AGAIN : 需要再次处理标记体 
Tag.SKIP_BODY: 结束对标记体的处理 
4.带属性的标记-从页面向自定义标记传递信息 
1)页面 
<demo:hello name="username" /> 
属性值也可以是表达式,如 :<demo:hello name="<%=request.getParameter("username")%>" /> 
2)标签处理类 
必须提供get,set方法对属性进行操作 
每个属性的set方法会在doStartTag()之前自动被调用 
3)TLD文件中必须对所有的属性进行定义 
代码 
<tag> 
    ... 
    <attribute> 
       <name>属性名</name> 
       <required>true表示属性必须存在,false表示可由可无</required> 
       <rtexprvalue>定义属性是否允许使用表达式,为false表示只允许使用字符串</rtexprvalue> 
    </attribute> 
  一、概要: 
1、JSP标签技术始于JSP1.1 
2、作用:代码复用;JSP页面简洁 
3、四个步骤: 
A、创建实现标签功能的JAVA类(Bean或Servlet) 
B、创建标签库的描述文件 
C、web.xml中添加标签库说明 
D、JSP页面中添加标签库说明,及使用标签 
4、标签可以访问的数据范围类型:application;session;request;page. 
------------------------[主要是为了说明什么时候用JavaBean或TagLib] 
二、TagLib常用知识点 
1、JSP Tag API----标签处理类必须是此API[只两种,且任一种即可]的子类 
-----javax.servlet.jsp.TagSupport 
-----javax.servlet.jsp.BodyTagSupport 
2、TagSupport的主要方法[8种]及重要属性[2个] 
1)主要方法: 
与Servlet容器处理TAG开关相关的方法: 
A、doStartTag()---Servlet容器遇到自定义标签的起始标志时调用该方法 
B、doEndTag()----Servlet容器遇到自定义标签的结束结志时调用该方法 
与标签处理类中值相关的方法: 
C、setValue(String k,Object o)---在标签处理类中设置key/value 
D、getValue(String k)--------------在标签处理类中根据参数key返回相应的value 
E、removeValue(String k)---------删除标签处理类中的相应的key/value 
与Servlet容器相关,设置页面上下文相关的方法: 
F、setPageContext(PageContext pc)--设置PageContext对象,该方法由Servlet容器 
                       在调用doStartTag或doEndTag方法前调用 
与标签嵌套相关的方法: 
G、setParent(Tag t)----------------设置嵌套了当前标签的上层标签的处理类,该方法由 
Servlet容器在调用doStartTag或doEndTag方法前调用 
H、getParent()---------------------- 返回嵌套了当前标签的上层标签的处理类 
2)重要属性: 
A、parent---代表了嵌套了当前标签的上层标签的处理类 
B、pageContext----代表了Web应用中的javax.servlet.jsp.PageContext对象 
两点说明: C、Servlet容器在调用doStartTag()或doEndTag()方法前,会先调用 
setPageContext()和setParent()方法,调置pageContext和parent. 
D、在doStartTag()或doEndTag()方法中可以通过getParent()方法获取上层标签的处理类; 
在TagSupport类中定义了protected类型的pageContext成员变量,因此在标签处理类 
中可以直接访问pageContext变量。 
3、pageContext类的几点说明: 
A、pageContext类提供了保存及访问WEB应用共享数据的方法: 
---public void setAttribute(String name,Object value,int scope) 
---public Object getAttribute(String name,int scope) 
B、scope---用来指定数据的作用范围。可选值如下: 
PageContext.PAGE_SCOPE 
PageContext.REQUEST_SCOPE 
PageContext. SESSION_SCOPE 
PageContext.APPLICATION_SCOPE 
如:setAttribute("userName","dxm",PageContext.SESSION_SCOPE); 
二、TagLib常用知识点 
4、javax.servlet.jsp.TagSupport的两个基础方法的重申: 
---public int doStartTag() throws JspException 
---public int doEndTag() throws JspException 
1)doStartTag()方法: 
A、当servlet容器遇到自定义标签的起始标志,就会调用doStartTag()方法。 
B、doStartTag()方法会返回一个整数值,用来决定程序的后续流程。它有两个可选值: 
代码 
----Tag.SKIP_BODY   
表示忽略掉标签之间的内容 
代码 
----Tag.EVAL_BODY_INCLUDE   
表示标签之间的肉容要正常执行 
如: 
... ... 
Dxm,Hello! 
... ... 
      
若的doStartTag()方法返回Tag.SKIP_BODY,“Dxm,Hello!”字样即不会出现在页 
面;若返回Tag.EVAL_BODY_INCLUDE,则页面上显示出"Dxm,Hello!"字样。 2)doEndTag()方法: 
A、当servlet容器遇到自定义标签的结束标志,就会自动调用doEndTag()方法 
B、doEndTag()方法也会返回一个整数值,用来决定程序的后续流程。它也有两个可选值: 
---Tag.SKIP_PAGE 
表示立刻停止执行JSP网页,网页上未处理的静态内容和JSP程序均被忽略,任何已有的输出 
内容立刻返回到客户的浏览器上。 
---Tag.EVAL_PAGE 
表示按正常的流程继续执行JSP网页。 
5、用户自定义标签属性: 
A、标签中可以包含自定义的属性,如: 
... ... 
B、但标签处理类中应将这个属性做为成员变量来使用,并给出赋值及取值的方法。如: 
代码 
private String username; 
   public setUsername(String value){ 
        this.username=value; 
  } 
public  String getUsername(){ 
        return username; 
  }

原创粉丝点击